Dave Jarvis' Repositories

git clone /repo/kmcaster.git

Micro-optimization for dispatch listeners

Author DaveJarvis <email>
Date 2020-07-26 13:27:57 GMT-0700
Commit 519fc5427239fb39b94f5e4dce013ab896ecb89c
Parent 77d0366
Delta 13 lines added, 9 lines removed, 4-line increase
src/main/com/whitemagicsoftware/kmcaster/EventHandler.java
*/
protected void updateSwitchLabel( final HardwareSwitchState state ) {
- final var keyColour = KEY_COLOURS.get( state.getHardwareState() );
+ final var hwState = state.getHardwareState();
+ final var keyColour = KEY_COLOURS.get( hwState );
if( state.isModifier() ) {
// A non-modifier key has been pressed.
- if( state.isHardwareState( SWITCH_PRESSED ) ) {
+ if( hwState == SWITCH_PRESSED ) {
// Determine whether there are separate parts for the key label.
final var index = keyValue.indexOf( ' ' );
src/main/com/whitemagicsoftware/kmcaster/listeners/PropertyDispatcher.java
*/
public abstract class PropertyDispatcher<P> {
+ /**
+ * Calling {@link PropertyChangeSupport#getPropertyChangeListeners()} creates
+ * a new list every time. Calls to add listeners are only performed during
+ * setup, so this is a micro-optimization to avoid recreating the list on
+ * each event fired.
+ */
+ private PropertyChangeListener[] mListeners;
+
private final PropertyChangeSupport mDispatcher =
new PropertyChangeSupport( this );
final PropertyChangeListener listener ) {
mDispatcher.addPropertyChangeListener( listener );
- }
-
- @SuppressWarnings("unused")
- public void removePropertyChangeListener(
- final PropertyChangeListener listener ) {
- mDispatcher.removePropertyChangeListener( listener );
+ mListeners = mDispatcher.getPropertyChangeListeners();
}
final var event = new PropertyChangeEvent( mDispatcher, pName, o, n );
- for( final var listener : mDispatcher.getPropertyChangeListeners() ) {
+ for( final var listener : mListeners ) {
listener.propertyChange( event );
}