in src/main/java/org/adoptopenjdk/jitwatch/ui/nmethod/codecache/CodeCacheLayoutPanel.java [426:508]
private void animate(double targetSeconds)
{
if (!preDraw())
{
return;
}
final List<CodeCacheEvent> events = codeCacheData.getEvents();
final int eventCount = events.size();
double framesPerSecond = 60;
double frameCount = targetSeconds * framesPerSecond;
final double eventsPerFrame = eventCount / frameCount;
final double secondsPerEvent = targetSeconds / eventCount;
final double nanoSecondsPerEvent = 1_000_000_000 * secondsPerEvent;
int delay = (int) (1000 / framesPerSecond);
btnAnimate.setEnabled(false);
timer = new Timer(delay, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
double realEventsPerFrame = eventsPerFrame;
if (eventsPerFrame < 1.0)
{
realEventsPerFrame = 1;
long now = System.nanoTime();
if (now - lastHandledAt < nanoSecondsPerEvent)
{
return;
}
lastHandledAt = now;
}
for (int i = 0; i < realEventsPerFrame; i++)
{
if (currentEvent >= eventCount)
{
stopAnimation(); // Stop the timer when events are done
return;
}
CodeCacheEvent event = events.get(currentEvent++);
if (!showEvent(event))
{
continue;
}
Compilation eventCompilation = event.getCompilation();
IMetaMember compilationMember = eventCompilation.getMember();
if (eventCompilation != null)
{
long addressOffset = event.getNativeAddress() - lowAddress;
double scaledAddress = (double) addressOffset / (double) addressRange;
double scaledSize = (double) event.getNativeCodeSize() / (double) addressRange;
int latestCompilationIndex = compilationMember.getCompilations().size() - 1;
Color fillColour = (eventCompilation.getIndex() == latestCompilationIndex) ? LATEST_COMPILATION : NOT_LATEST_COMPILATION;
double x = scaledAddress * width;
double y = 0;
double w = scaledSize * width;
double h = height;
// Paint the compilation event onto the canvas
// plotCompilation(x, y, w, h, fillColour, eventCompilation, false);
}
}
//
// repaint();
}
});
timer.start(); // Start the animation
}