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 peer: Peer
val menuBar: JMenuBar? val menuBar: JMenuBar?
val frame: JFrame val frame: JFrame
GlobalMenu.Log.warn(ideFrame.toString())
when (ideFrame) { when (ideFrame) {
is ProjectFrameHelper -> { is ProjectFrameHelper -> {
peer = ideFrame.rootPane.peer peer = ideFrame.rootPane.peer

View File

@ -76,7 +76,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen
try { try {
when (eventId) { when (eventId) {
"clicked" -> menuHolder.find(id)?.onEvent() "clicked" -> menuHolder.find(id)?.onEvent()
"opened" -> menuHolder.find(id)?.update() "opened" -> menuHolder.find(id)?.maybeUpdate()
} }
} catch (e: Exception) { } catch (e: Exception) {
GlobalMenu.Log.error("Failed to handle event $eventId for menu $id", e) 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 { override fun AboutToShow(id: Int): Boolean {
if (GlobalMenu.debugging) GlobalMenu.Log.warn("About to show menu $id") if (GlobalMenu.debugging) GlobalMenu.Log.warn("About to show menu $id")
try { try {
menuHolder.find(id)?.update() menuHolder.find(id)?.maybeUpdate()
return true return true
} catch (e: Exception) { } catch (e: Exception) {
GlobalMenu.Log.error("Failed to update menu $id", e) GlobalMenu.Log.error("Failed to update menu $id", e)

View File

@ -13,4 +13,18 @@ interface Menu {
val children: List<Menu>? val children: List<Menu>?
fun onEvent() fun onEvent()
fun update() 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.imageio.ImageIO
import javax.swing.* 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 id = holder.getId(menuItem)
override val isSeparator: Boolean get() = menuItem == null override val isSeparator: Boolean get() = menuItem == null
override val label: String get() = menuItem?.text ?: "" override val label: String get() = menuItem?.text ?: ""
@ -94,6 +94,7 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH
} }
override fun update() { override fun update() {
super.update()
try { try {
if (menuItem is ActionMenu) { if (menuItem is ActionMenu) {
runBlocking { runBlocking {

View File

@ -7,7 +7,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import javax.swing.JMenuItem 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 id: Int get() = 0
override val isSeparator: Boolean get() = menuItems == null override val isSeparator: Boolean get() = menuItems == null
override val label: String get() = name override val label: String get() = name
@ -24,6 +24,7 @@ class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: S
} }
override fun update() { override fun update() {
super.update()
runBlocking { runBlocking {
launch(Dispatchers.EDT) { launch(Dispatchers.EDT) {
syncChildren() syncChildren()
@ -41,6 +42,6 @@ class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: S
} }
private fun syncChildren() { 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
} }
} }