From 23eb6dc8809d0eed5bac8a99e813d5fc8ad69181 Mon Sep 17 00:00:00 2001 From: JFronny Date: Mon, 22 Jul 2024 17:18:12 +0200 Subject: [PATCH] perf: some low-hanging fruit --- .../gitlab/jfronny/globalmenu/GlobalMenuService.kt | 1 - .../jfronny/globalmenu/proxy/DbusmenuImpl.kt | 4 ++-- .../io/gitlab/jfronny/globalmenu/proxy/Menu.kt | 14 ++++++++++++++ .../gitlab/jfronny/globalmenu/proxy/SwingMenu.kt | 3 ++- .../jfronny/globalmenu/proxy/SwingRootMenu.kt | 5 +++-- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/GlobalMenuService.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/GlobalMenuService.kt index 1e67b6e..c5ac5dc 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/GlobalMenuService.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/GlobalMenuService.kt @@ -30,7 +30,6 @@ class GlobalMenuService(private val app: Application) : ApplicationActivationLis val peer: Peer val menuBar: JMenuBar? val frame: JFrame - GlobalMenu.Log.warn(ideFrame.toString()) when (ideFrame) { is ProjectFrameHelper -> { peer = ideFrame.rootPane.peer diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt index 0ccad4c..9169df7 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt @@ -76,7 +76,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen try { when (eventId) { "clicked" -> menuHolder.find(id)?.onEvent() - "opened" -> menuHolder.find(id)?.update() + "opened" -> menuHolder.find(id)?.maybeUpdate() } } catch (e: Exception) { GlobalMenu.Log.error("Failed to handle event $eventId for menu $id", e) @@ -88,7 +88,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen override fun AboutToShow(id: Int): Boolean { if (GlobalMenu.debugging) GlobalMenu.Log.warn("About to show menu $id") try { - menuHolder.find(id)?.update() + menuHolder.find(id)?.maybeUpdate() return true } catch (e: Exception) { GlobalMenu.Log.error("Failed to update menu $id", e) diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/Menu.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/Menu.kt index f9ce387..e2c768c 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/Menu.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/Menu.kt @@ -13,4 +13,18 @@ interface Menu { val children: List? fun onEvent() fun update() + fun maybeUpdate() + + abstract class Abstract : Menu { + private var lastUpdated = 0L + override fun maybeUpdate() { + if (System.currentTimeMillis() - lastUpdated > 1000) { + update() + } + } + + override fun update() { + lastUpdated = System.currentTimeMillis() + } + } } \ No newline at end of file diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt index 8cad00c..999bd3a 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt @@ -17,7 +17,7 @@ import java.util.* import javax.imageio.ImageIO import javax.swing.* -class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuHolder) : Menu { +class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuHolder) : Menu.Abstract() { override val id = holder.getId(menuItem) override val isSeparator: Boolean get() = menuItem == null override val label: String get() = menuItem?.text ?: "" @@ -94,6 +94,7 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH } override fun update() { + super.update() try { if (menuItem is ActionMenu) { runBlocking { diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt index 0bfd4ac..521918c 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import javax.swing.JMenuItem -class SwingRootMenu(private var menuItems: List?, private val name: String, private val holder: SwingMenuHolder): Menu { +class SwingRootMenu(private var menuItems: List?, private val name: String, private val holder: SwingMenuHolder): Menu.Abstract() { override val id: Int get() = 0 override val isSeparator: Boolean get() = menuItems == null override val label: String get() = name @@ -24,6 +24,7 @@ class SwingRootMenu(private var menuItems: List?, private val name: S } override fun update() { + super.update() runBlocking { launch(Dispatchers.EDT) { syncChildren() @@ -41,6 +42,6 @@ class SwingRootMenu(private var menuItems: List?, private val name: S } private fun syncChildren() { - _children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(2) } } + _children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(1) } } // setting this to 2 may help prevent missing entries but is SLLOOOOWWW } }