[patch] JNI performance improvements
graydon hoare
graydon@redhat.com
Fri Jan 14 18:56:00 GMT 2005
Bryce McKinlay wrote:
> will be common. For example, won't the AWT JNI code be re-entered
> frequently now that we have a single event dispatch thread? ie:
> gtk_main_iteration called from event thread via JNI, an event is
> dispatched back to application which then makes another JNI call?
a reasonable concern, but I think we're safe. the event dispatch thread
basically switches back and forth (at a sufficiently high frequency --
I'm currently tuning this) between two phases of acticity:
phase 1:
java event loop
-> JNI
-> gtk_main_iteration()
-> gtk_event_callback_fooEvent()
-> java.awt.EventQueue.enqueue(fooEvent)
phase 2:
java event loop
-> dispatch java fooEvent
-> JComponent.paint()
-> Graphics.drawLine()
-> JNI
-> gdk_draw_line()
both phases have only one JNI frame in them, most of the time (there are
special cases like window reconfiguration which don't, but they're very
rare). in any case, it's only phase 2 calls which really hurt us; the
painting traffic is perhaps 100x as heavy as the event transferring.
in general I agree with your reasoning that more could be done here, in
terms of keeping a cached frame chain. also, as tromey recommends, we
could do a lot more to make local references faster. this was just low
hanging fruit, but the profiles show it hits the cases which matter.
-graydon
More information about the Java-patches
mailing list