perf: some low-hanging fruit

This commit is contained in:
Johannes Frohnmeyer 2024-07-22 17:18:12 +02:00
parent 015190af19
commit 23eb6dc880
Signed by: Johannes
GPG Key ID: E76429612C2929F4
5 changed files with 21 additions and 6 deletions

View File

@ -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

View File

@ -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)

View File

@ -13,4 +13,18 @@ interface Menu {
val children: List<Menu>?
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()
}
}
}

View File

@ -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 {

View File

@ -7,7 +7,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import javax.swing.JMenuItem
class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: String, private val holder: SwingMenuHolder): Menu {
class SwingRootMenu(private var menuItems: List<JMenuItem>?, 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<JMenuItem>?, private val name: S
}
override fun update() {
super.update()
runBlocking {
launch(Dispatchers.EDT) {
syncChildren()
@ -41,6 +42,6 @@ class SwingRootMenu(private var menuItems: List<JMenuItem>?, 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
}
}