Added SystemInfo record that gathers a variety of interesting system

statistics and provides a facility for updating the statistics and
obtaining a concise human-readable string presentation.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@1010 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
shaper
2003-01-14 22:07:06 +00:00
parent e02c31a718
commit c4fc394c3d
2 changed files with 193 additions and 0 deletions
@@ -0,0 +1,150 @@
//
// $Id: SystemInfo.java,v 1.1 2003/01/14 22:07:05 shaper Exp $
//
// samskivert library - useful routines for java programs
// Copyright (C) 2003 Walter Korman
//
// 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.
//
// 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
package com.samskivert.util;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
/**
* A record detailing that gathers and makes available various useful bits
* of system information. The record is populated with the current system
* statistics at construction time, and may be refreshed as desired with a
* call to {@link #update}.
*/
public class SystemInfo
{
/** The operating system name. */
public String osName;
/** The operating system version. */
public String osVersion;
/** The operating system architecture. */
public String osArch;
/** The JVM version. */
public String javaVersion;
/** The JVM vendor. */
public String javaVendor;
/** The amount of free memory in kilobytes. */
public long freeMemory;
/** The amount of used memory in kilobytes. */
public long usedMemory;
/** The amount of total memory available in kilobytes. */
public long totalMemory;
/** The maximum amount of memory available in kilobytes. */
public long maxMemory;
/** The video display bit depth; see {@link DisplayMode}. */
public int bitDepth;
/** The video display refresh rate in kHz; see {@link DisplayMode}. */
public int refreshRate;
/** Whether the video display is currently set to full-screen mode. */
public boolean isFullScreen;
/** The video display width in pixels. */
public int displayWidth;
/** The video display height in pixels. */
public int displayHeight;
/**
* Constructs a system info object.
*/
public SystemInfo ()
{
// gather initial system info
update();
}
/**
* Updates the system info record's statistics to reflect the current
* state of the JVM.
*/
public void update ()
{
// grab the various system properties
osName = System.getProperty("os.name");
osVersion = System.getProperty("os.version");
osArch = System.getProperty("os.arch");
javaVersion = System.getProperty("java.version");
javaVendor = System.getProperty("java.vendor");
// determine memory usage
Runtime rtime = Runtime.getRuntime();
freeMemory = rtime.freeMemory() / 1024;
totalMemory = rtime.totalMemory() / 1024;
usedMemory = totalMemory - freeMemory;
maxMemory = rtime.maxMemory() / 1024;
// determine video display information
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode mode = gd.getDisplayMode();
bitDepth = mode.getBitDepth();
refreshRate = mode.getRefreshRate() / 1024;
isFullScreen = (gd.getFullScreenWindow() != null);
displayWidth = mode.getWidth();
displayHeight = mode.getHeight();
}
/**
* Returns a string representation of this instance.
*/
public String toString ()
{
StringBuffer buf = new StringBuffer();
// hardware and platform information
buf.append("OS: ").append(osName).append(" (").
append(osVersion).append("-").append(osArch).append(")\n");
buf.append("JVM: ").append(javaVersion).
append(", ").append(javaVendor).append("\n");
// memory information
buf.append("Memory: ").append(freeMemory).append("k free, ").
append(usedMemory).append("k used, ").
append(totalMemory).append("k total, ").
append(maxMemory).append("k max\n");
// video information
String sbitDepth = (bitDepth == -1) ? "unknown bit depth" :
bitDepth + "-bit";
String srefreshRate =
(refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) ?
"unknown refresh rate" : (refreshRate + "kHz");
String sfullScreen = (isFullScreen) ? "full-screen" : "windowed";
buf.append("Display: ").append(displayWidth).append("x").
append(displayHeight).append(", ").append(sbitDepth).
append(", ").append(srefreshRate).append(", ").append(sfullScreen);
return buf.toString();
}
}
@@ -0,0 +1,43 @@
//
// $Id: SystemInfoDemo.java,v 1.1 2003/01/14 22:07:06 shaper Exp $
//
// samskivert library - useful routines for java programs
// Copyright (C) 2003 Walter Korman
//
// 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.
//
// 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
package com.samskivert.util;
public class SystemInfoDemo
{
public static void main (String[] args)
{
// output initial system information
SystemInfo info = new SystemInfo();
System.out.println("Initial system info:");
System.out.println(info.toString());
// allocate a bit of data
System.out.println("\nAllocating test data.");
for (int ii = 0; ii < 10000; ii++) {
int[] data = new int[100];
}
// update and output the latest system information
info.update();
System.out.println("\nUpdated system info:");
System.out.println(info.toString());
}
}