Skip to content

Performance with zonemapper #367

@cycomanic

Description

@cycomanic

Describe the bug

I've recently come back to lightzone after many years with other software (I still think lightzone has the most intuitive interface for making photo edits). However I've found that if I edit my photos and add a zonemapper module, lightzone slows to a crawl. In particular when zoomed in (I have a 4k monitor). Often the interface will freeze for 10s of seconds when zooming. If started from a terminal I will see lots of:

EventThread blocked for N.000 seconds

and also:


imer-0: TIMED_WAITING
        at [email protected]/java.lang.Object.wait0(Native Method)
        at [email protected]/java.lang.Object.wait(Object.java:366)
        at [email protected]/java.util.TimerThread.mainLoop(Timer.java:563)
        at [email protected]/java.util.TimerThread.run(Timer.java:516)
Thread-5: WAITING
        at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
        at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
        at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
        at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
        at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
        at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
        at [email protected]/java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:535)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
        at [email protected]/java.lang.Thread.run(Thread.java:1583)
Thread-15: WAITING
        at [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
        at [email protected]/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371)
        at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519)
        at [email protected]/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780)
        at [email protected]/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725)
        at [email protected]/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1712)
        at [email protected]/java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:535)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
        at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
        at [email protected]/java.lang.Thread.run(Thread.java:1583)
Image Task Queue: WAITING
        at [email protected]/java.lang.Object.wait0(Native Method)
        at [email protected]/java.lang.Object.wait(Object.java:366)
        at [email protected]/java.lang.Object.wait(Object.java:339)
        at app//com.lightcrafts.ui.browser.model.ImageTaskQueue.waitForNotify(ImageTaskQueue.java:137)
        at app//com.lightcrafts.ui.browser.model.ImageTaskQueue.run(ImageTaskQueue.java:101)
        at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
        at [email protected]/java.lang.Thread.run(Thread.java:1583)
RawImageCache: WAITING
        at [email protected]/java.lang.Object.wait0(Native Method)
        at [email protected]/java.lang.Object.wait(Object.java:366)
        at [email protected]/java.lang.Object.wait(Object.java:339)
        at app//com.lightcrafts.image.types.RawImageCache.run(RawImageCache.java:123)
Finalizer: WAITING
        at [email protected]/java.lang.Object.wait0(Native Method)
        at [email protected]/java.lang.Object.wait(Object.java:366)
        at [email protected]/java.lang.Object.wait(Object.java:339)
        at [email protected]/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48)
        at [email protected]/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158)
        at [email protected]/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89)
        at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173)
ZoneFinder Histogrammer: BLOCKED
        at app//com.lightcrafts.model.ImageEditor.ZoneFinder$Segmenter.getNextView(ZoneFinder.java:341)
        at app//com.lightcrafts.model.ImageEditor.ZoneFinder$Segmenter.run(ZoneFinder.java:359)

To Reproduce
Steps to reproduce the behavior:

  1. edit a Sony A7ii arw file
  2. add a zonemapper tool
  3. zoom into the image
  4. change zones in zonemapper

Expected behavior
Photo preview updates reasonably fast

Screenshots

Desktop (please complete the following information):

  • Version: Latest git
  • OS: arch linux

Additional context
I've tried profiling using visualvm and see lots of time spend on lcms doTransform (but I'm by no means a java expert, so this might be a red herring).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions