Frage

Ich mag die „Geschäftigkeit“ meines Event-Dispatching Thema messen. Eine mögliche Idee ist, einen Hintergrund-Thread einrichten, die etwas tut, wie:

while(true) {
    final long[] end = new long[1]; // Array to get stuff out from Runnable.
    long start = System.nanoTime();
    EventQueue.invokeAndWait(new Runnable() {
        public void run() {
            end[0] = System.nanoTime(); 
        }
    });
    long queueTimeNs = end[0] - start;
    // Report the queue time somewhere.
    Thread.sleep(100); // Poll the EDT < 10 times/s.
}

Die Idee ist, zu messen, wie lange es den EDT nimmt ein Ereignis senden, um es geschickt zu werden. Dies wäre eine grobe Vorstellung über die Reaktionsfähigkeit der Benutzeroberfläche geben.

Ergibt das einen Sinn? Gibt es eine weitere Standard-Weg, etwas Ähnliches zu tun?

War es hilfreich?

Lösung

Ich verwende ein ausgezeichnetes Werkzeug dafür: SwingExplorer. Es ermöglicht Ihnen, Ihre Swing-Komponenten zu überprüfen, um zu sehen, wie sie gezeichnet werden, die EDT Verletzungen zu erkennen, und die Hänge des EDT zu erkennen. Grundsätzlich geben Sie einen Wert für die Dauer in Millisekunden, und Sie dann mit Ihrer App spielen. Wenn die EDT hängt seit mehr als diese Dauer wird der Hang in dem Werkzeug des UI angemeldet.

Die offizielle Seite ist https://swingexplorer.dev.java.net , aber es scheint im Moment habe ich diese Antwort schreiben gelegt. Sie können ein Plugin für Eclipse und NetBeans finden, und Sie können auch swingexplorer auf einer Maven-Repository finden, wenn Sie Maven (sorry, ich kann keine Verbindung für den Moment finden)

Mindestens das Repository ist noch verfügbar: cvs -d :pserver:guest:guest@cvs.dev.java.net:/shared/data/ccvs/repository co swingexplorer

Bearbeiten

sah ich den Quellcode von Swing-Explorer, und es scheint, dass sie eine benutzerdefinierte EventQueue schrieb das EDT Verhalten zu untersuchen. Der Code scheint zu einem anderen Projekt zusammenhängen, SwingHelper .

Edit 2

Die Website des Projekts wird wieder kommen bald unter http://java.net/projects/swingexplorer

Andere Tipps

Ich denke, Ihre appraoch liegen in der Nähe ideal bei der Messung „Ansprechbarkeit“, da es berücksichtigt sowohl die tatsächliche Menge an Arbeit im EDT getan (möglicherweise viel zu viel in einem schlecht gestalteten app) und die Fähigkeit der Maschine zu tun, dass Arbeit.

BTW, habe ich einmal versucht, die EDT zu ersetzen / Umleiten, aber nach vielen Stunden fand ich, dass es unmöglich war selbst wenn recklessly Reflexion Zugriff Reservierter Bereiche Implementierungsklassen verwenden. Am Ende gelenkig alles auf ein lokales Objekt Wesen auf wartete, was unmöglich war, einen Halt zu bekommen.

Ich vermute, dass aus dem gleichen Grunde möglich, es ist nicht die EDT abfangen Informationen wie die Anzahl der Ereignisse zu bekommen verarbeitet (das war meine erste Idee für eine Metrik, die Sie verwenden können).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top