private void animate()

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
    }