/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package realtime;
import javax.swing.RepaintManager;
/**
* A <code>RepaintManager</code> that logs the time spent in drawing operations.
*/
abstract class LogRepaintManager extends RepaintManager {
boolean logging;
long elapsed;
Thread logThread;
long delay = 500;
/**
* Creates a new <code>LogRepaintManager</code>.
*/
public LogRepaintManager() {
logThread = new Thread() {
Override
public void run() {
for (;;) {
startDrawingLog();
long prev = System.currentTimeMillis();
try {
sleep(delay);
} catch (InterruptedException e) {
break;
}
long drawTime = endDrawingLog();
long now = System.currentTimeMillis();
long elapsed = now - prev;
newLog(elapsed, drawTime);
}
}
};
}
/**
* Invoked when a new measurement is available.
*/
public abstract void newLog(long elapsed, long drawTime);
/**
* Starts the logging thread.
*/
public void startLog() {
logThread.start();
}
/**
* Stops the logging thread.
*/
public void endLog() {
logThread.interrupt();
}
/**
* Starts logging the drawing time.
*
* @see #paintDirtyRegions
*/
synchronized void startDrawingLog() {
logging = true;
elapsed = 0;
}
/**
* Ends logging the drawing time.
*
* @return The elapsed time spent in drawings.
* @see #paintDirtyRegions
*/
synchronized long endDrawingLog() {
logging = false;
return elapsed;
}
/**
* Overridden to log the time spent fulfilling the posted drawing requests.
*/
Override
public void paintDirtyRegions() {
long start = System.currentTimeMillis();
super.paintDirtyRegions();
if (logging)
elapsed += System.currentTimeMillis() - start;
}
}