/**
*
*/
package org.squidy.performance.pipeline;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.junit.Ignore;
import org.squidy.manager.data.DataConstant;
import org.squidy.manager.data.IData;
import org.squidy.manager.data.IDataContainer;
import org.squidy.manager.data.impl.DataPosition2D;
import org.squidy.manager.model.AbstractNode;
/**
* <code>GaugeNode</code>.
*
* <pre>
* Date: Jul 22, 2010
* Time: 2:32:47 PM
* </pre>
*
* @author Roman Rädle, <a href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle@uni-konstanz.de</a>, University of Konstanz
* @version $Id$
* @since 1.5.0
*/
@Ignore
public class GaugeNode extends AbstractNode {
private GaugingCallback gaugingCallback;
/**
* @param gaugingCallback
*/
public void setGaugingCallback(GaugingCallback gaugingCallback) {
this.gaugingCallback = gaugingCallback;
}
private Timer timer;
private int frameCount;
private List<Integer> fpsList = new ArrayList<Integer>();
private synchronized void setFrameCount(int frameCount) {
this.frameCount = frameCount;
}
/**
* @return
*/
public int getMeasuringPoints() {
return fpsList.size();
}
/**
* @return
*/
public int getMeanAverageFPS() {
int totalFPS = 0;
for (int fps : fpsList) {
totalFPS += fps;
}
return totalFPS / fpsList.size();
}
/**
* @return
*/
public int getMedianFPS() {
List<Integer> tmpFPSList = new ArrayList<Integer>(fpsList);
Collections.sort(tmpFPSList);
int medianFPS = 0;
int midPoint = tmpFPSList.size() / 2;
if (tmpFPSList.size() % 2 == 0) {
int v1 = tmpFPSList.get(midPoint);
int v2 = tmpFPSList.get(midPoint - 1);
medianFPS = (v1 + v2) / 2;
}
else {
medianFPS = tmpFPSList.get(midPoint);
}
return medianFPS;
}
/**
* @return
*/
public Integer[] getValues() {
return fpsList.toArray(new Integer[0]);
}
/* (non-Javadoc)
* @see org.squidy.manager.model.AbstractNode#onStart()
*/
@Override
public void onStart() {
super.onStart();
frameCount = 0;
// Clear previous results.
fpsList.clear();
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
/* (non-Javadoc)
* @see java.util.TimerTask#run()
*/
@Override
public void run() {
fpsList.add(frameCount);
setFrameCount(0);
if (gaugingCallback != null && gaugingCallback.checkForAchievement(fpsList.size())) {
gaugingCallback.cyclesAchieved();
}
}
}, 1000, 1000);
}
/* (non-Javadoc)
* @see org.squidy.manager.model.AbstractNode#onStop()
*/
@Override
public void onStop() {
super.onStop();
timer.cancel();
timer = null;
}
/* (non-Javadoc)
* @see org.squidy.manager.model.AbstractNode#checkProcessingPrivileges(org.squidy.manager.data.IDataContainer)
*/
@Override
public boolean checkProcessingPrivileges(IDataContainer dataContainer) {
return isProcessing();
}
/**
* @return
*/
public IData process(DataPosition2D dataPosition2D) {
setFrameCount(++frameCount);
return dataPosition2D;
}
public static interface GaugingCallback {
public void cyclesAchieved();
public boolean checkForAchievement(int cylces);
}
}