Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import amidst.gui.main.viewer.widget.BiomeExporterProgressWidget;
import amidst.gui.main.viewer.widget.BiomeToggleWidget;
import amidst.gui.main.viewer.widget.BiomeWidget;
import amidst.gui.main.viewer.widget.CpuUsageTimer;
import amidst.gui.main.viewer.widget.CursorInformationWidget;
import amidst.gui.main.viewer.widget.DebugWidget;
import amidst.gui.main.viewer.widget.FpsWidget;
Expand Down Expand Up @@ -57,7 +58,7 @@ private static List<Widget> createWidgets(
BiomeToggleWidget biomeToggleWidget = new BiomeToggleWidget(CornerAnchorPoint.BOTTOM_RIGHT, biomeWidget, biomeSelection);
WorldOptions worldOptions = world.getWorldOptions();
return Arrays.asList(
new FpsWidget( CornerAnchorPoint.BOTTOM_LEFT, new FramerateTimer(2), settings.showFPS),
new FpsWidget( CornerAnchorPoint.BOTTOM_LEFT, new FramerateTimer(2), new CpuUsageTimer(1), settings.showFPS),
new ScaleWidget( CornerAnchorPoint.BOTTOM_CENTER, zoom, settings.showScale),
new SeedAndWorldTypeWidget( CornerAnchorPoint.TOP_LEFT, worldOptions.getWorldSeed(), worldOptions.getWorldType()),
new SelectedIconWidget( CornerAnchorPoint.TOP_LEFT, worldIconSelection),
Expand Down
46 changes: 46 additions & 0 deletions src/main/java/amidst/gui/main/viewer/widget/CpuUsageTimer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package amidst.gui.main.viewer.widget;

import java.lang.management.ManagementFactory;

import com.sun.management.OperatingSystemMXBean;

import amidst.documentation.AmidstThread;
import amidst.documentation.CalledOnlyBy;
import amidst.documentation.NotThreadSafe;

@SuppressWarnings("restriction")
@NotThreadSafe
public class CpuUsageTimer {
private final OperatingSystemMXBean operatingSystemMXBean;

private long lastTime;
private long msPerUpdate;

private float currentUsage = 0.0f;

@CalledOnlyBy(AmidstThread.EDT)
public CpuUsageTimer(int updatesPerSecond) {
this.operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
msPerUpdate = (long) (1000d / updatesPerSecond);
reset();
}

@CalledOnlyBy(AmidstThread.EDT)
public void reset() {
lastTime = System.currentTimeMillis();
}

@CalledOnlyBy(AmidstThread.EDT)
public void tick() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastTime > msPerUpdate) {
currentUsage = (float) (operatingSystemMXBean.getProcessCpuLoad() * 100);
lastTime = currentTime;
}
}

@CalledOnlyBy(AmidstThread.EDT)
public float getCurrentUsage() {
return currentUsage;
}
}
25 changes: 5 additions & 20 deletions src/main/java/amidst/gui/main/viewer/widget/FpsWidget.java
Original file line number Diff line number Diff line change
@@ -1,49 +1,34 @@
package amidst.gui.main.viewer.widget;

import java.lang.management.ManagementFactory;
import java.util.Arrays;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import com.sun.management.OperatingSystemMXBean;

import amidst.documentation.AmidstThread;
import amidst.documentation.CalledOnlyBy;
import amidst.documentation.NotThreadSafe;
import amidst.settings.Setting;

@SuppressWarnings("restriction")
@NotThreadSafe
public class FpsWidget extends TextWidget {
private final FramerateTimer fpsTimer;
private final CpuUsageTimer usageTimer;
private final Setting<Boolean> isVisibleSetting;
private final OperatingSystemMXBean operatingSystemMXBean;
private final Timer usageTimer = new Timer("UsageTimer", true);
private volatile double cpuLoad;

@CalledOnlyBy(AmidstThread.EDT)
public FpsWidget(CornerAnchorPoint anchor, FramerateTimer fpsTimer, Setting<Boolean> isVisibleSetting) {
public FpsWidget(CornerAnchorPoint anchor, FramerateTimer fpsTimer, CpuUsageTimer usageTimer, Setting<Boolean> isVisibleSetting) {
super(anchor);
this.fpsTimer = fpsTimer;
this.usageTimer = usageTimer;
this.isVisibleSetting = isVisibleSetting;
this.operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

usageTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
cpuLoad = operatingSystemMXBean.getProcessCpuLoad() * 100;
}
}, 0, 500);
}

@CalledOnlyBy(AmidstThread.EDT)
@Override
protected List<String> updateTextLines() {
fpsTimer.tick();
usageTimer.tick();
if (isVisibleSetting.get()) {
return Arrays.asList(
"CPU: " + String.format("%.1f", cpuLoad) + "%",
"CPU: " + String.format("%.1f", usageTimer.getCurrentUsage()) + "%",
"FPS: " + String.format("%.1f", fpsTimer.getCurrentFPS()));
} else {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class FramerateTimer {

@CalledOnlyBy(AmidstThread.EDT)
public FramerateTimer(int updatesPerSecond) {
msPerUpdate = (long) (1000f * (1f / updatesPerSecond));
msPerUpdate = (long) (1000d / updatesPerSecond);
reset();
}

Expand Down