Summary: | Crash while working on many raster layers with a transform mask each | ||
---|---|---|---|
Product: | [Applications] krita | Reporter: | Dynline <saranvale> |
Component: | Resize/Scale Image/Layer | Assignee: | Dmitry Kazakov <dimula73> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | griffinvalley |
Priority: | NOR | Keywords: | triaged |
Version: | 5.2.0 | ||
Target Milestone: | --- | ||
Platform: | Other | ||
OS: | Other | ||
Latest Commit: | https://invent.kde.org/graphics/krita/-/commit/bd8fdd243a3ba864f2c0d1d99ffc8b4d7afc0ff6 | Version Fixed In: | |
Sentry Crash Report: | |||
Attachments: | Crash report |
Assigning this to dmitry, as per his request. Hi, Dynline! Could you please check if you have a **crash** in the recent nightly builds? https://binary-factory.kde.org/job/Krita_Nightly_Windows_Build/ I cannot reproduce the crash itself, though I can reproduce a weird offset issue caused by duplicating a layer with its mask. I'm going to fix the offset part of the issue, but for the crash I need more info. A possibly relevant merge request was started @ https://invent.kde.org/graphics/krita/-/merge_requests/2064 Git commit c7a825451c110dd7524be053801c0af74a47f957 by Dmitry Kazakov. Committed on 02/02/2024 at 17:10. Pushed by dkazakov into branch 'master'. Fix transform mask updates triggered by transform tool in-stroke When transform mask changes the options of the transform mask it shouldn't trigger static updates when the stroke is running, because the cache is overridden. M +5 -3 libs/image/kis_transform_mask.cpp https://invent.kde.org/graphics/krita/-/commit/c7a825451c110dd7524be053801c0af74a47f957 Git commit b005afc5b03c160e504116798a99e1caa7ba4cb6 by Dmitry Kazakov. Committed on 02/02/2024 at 17:10. Pushed by dkazakov into branch 'master'. Fix artifacts when changing transform mask continuously The patch implements multiple things: 1) Makes static cache storage in the transform mask thread-safe and encapsulated in a single structure. 2) Makes sure that KisRecalculateTransformMaskJob::run() cannot run twice for the same parameters. Now it is governed by m_mask->staticImageCacheIsValid() check in the beginnig of the function. The multiple invocations could happen due to concurrent calls to KisTransformMask::slotDelayedStaticUpdate() (by the timer) and KisTransformMask::threadSafeForceStaticImageUpdate() (by an undo command). That could happen in the beginning of the transformation stroke. Now the two calls will be compressed by the cache validity check. 3) InplaceTransformStrokeStrategy does a better job in maintaining updates for the final lod0 update of the lodN stroke. 4) Implements a unittest for testing the inplace stroke strategy. Alas its results are not very stable, so it is marked as broken for now. M +1 -0 libs/image/CMakeLists.txt A +10 -0 libs/image/KisTransformMaskTestingInterface.cpp [License: GPL(v2.0+)] A +25 -0 libs/image/KisTransformMaskTestingInterface.h [License: GPL(v2.0+)] M +8 -1 libs/image/kis_recalculate_transform_mask_job.cpp M +2 -1 libs/image/kis_recalculate_transform_mask_job.h M +197 -64 libs/image/kis_transform_mask.cpp M +11 -1 libs/image/kis_transform_mask.h M +9 -2 plugins/tools/tool_transform2/strokes/inplace_transform_stroke_strategy.cpp M +5 -0 plugins/tools/tool_transform2/tests/CMakeLists.txt A +627 -0 plugins/tools/tool_transform2/tests/TransformStrokeStrategyTest.cpp [License: GPL(v2.0+)] A +24 -0 plugins/tools/tool_transform2/tests/TransformStrokeStrategyTest.h [License: GPL(v2.0+)] A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0-cancelled/inplace-lod0-cancelled_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0-continue-and-cancel/inplace-lod0-continue-and-cancel_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0/inplace-lod0_autobrush_300px.kpp_indirect_finished_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2-cancelled/inplace-lod2-cancelled_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2-continue-and-cancel/inplace-lod2-continue-and-cancel_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2/inplace-lod2_autobrush_300px.kpp_indirect_finished_internal.png M +23 -2 sdk/tests/stroke_testing_utils.cpp M +4 -0 sdk/tests/stroke_testing_utils.h https://invent.kde.org/graphics/krita/-/commit/b005afc5b03c160e504116798a99e1caa7ba4cb6 Git commit 9778839e48e0857828429b11a887dcc47d745847 by Dmitry Kazakov. Committed on 02/02/2024 at 17:10. Pushed by dkazakov into branch 'master'. Fix transform masks being broken after duplication M +1 -0 plugins/tools/tool_transform2/KisAnimatedTransformMaskParamsHolder.cpp https://invent.kde.org/graphics/krita/-/commit/9778839e48e0857828429b11a887dcc47d745847 Git commit 9ea99d4ab11f4ecd5f5d40c4d298fe4a07e1ce70 by Dmitry Kazakov. Committed on 28/02/2024 at 12:56. Pushed by dkazakov into branch 'kazakov/for-5.2'. Fix artifacts when changing transform mask continuously The patch implements multiple things: 1) Makes static cache storage in the transform mask thread-safe and encapsulated in a single structure. 2) Makes sure that KisRecalculateTransformMaskJob::run() cannot run twice for the same parameters. Now it is governed by m_mask->staticImageCacheIsValid() check in the beginnig of the function. The multiple invocations could happen due to concurrent calls to KisTransformMask::slotDelayedStaticUpdate() (by the timer) and KisTransformMask::threadSafeForceStaticImageUpdate() (by an undo command). That could happen in the beginning of the transformation stroke. Now the two calls will be compressed by the cache validity check. 3) InplaceTransformStrokeStrategy does a better job in maintaining updates for the final lod0 update of the lodN stroke. 4) Implements a unittest for testing the inplace stroke strategy. Alas its results are not very stable, so it is marked as broken for now. M +1 -0 libs/image/CMakeLists.txt A +10 -0 libs/image/KisTransformMaskTestingInterface.cpp [License: GPL(v2.0+)] A +25 -0 libs/image/KisTransformMaskTestingInterface.h [License: GPL(v2.0+)] M +8 -1 libs/image/kis_recalculate_transform_mask_job.cpp M +2 -1 libs/image/kis_recalculate_transform_mask_job.h M +197 -64 libs/image/kis_transform_mask.cpp M +11 -1 libs/image/kis_transform_mask.h M +9 -2 plugins/tools/tool_transform2/strokes/inplace_transform_stroke_strategy.cpp M +5 -0 plugins/tools/tool_transform2/tests/CMakeLists.txt A +627 -0 plugins/tools/tool_transform2/tests/TransformStrokeStrategyTest.cpp [License: GPL(v2.0+)] A +24 -0 plugins/tools/tool_transform2/tests/TransformStrokeStrategyTest.h [License: GPL(v2.0+)] A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0-cancelled/inplace-lod0-cancelled_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0-continue-and-cancel/inplace-lod0-continue-and-cancel_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod0/inplace-lod0_autobrush_300px.kpp_indirect_finished_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2-cancelled/inplace-lod2-cancelled_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2-continue-and-cancel/inplace-lod2-continue-and-cancel_autobrush_300px.kpp_indirect_cancelled_internal.png A +- -- plugins/tools/tool_transform2/tests/data/inplace-lod2/inplace-lod2_autobrush_300px.kpp_indirect_finished_internal.png M +23 -2 sdk/tests/stroke_testing_utils.cpp M +4 -0 sdk/tests/stroke_testing_utils.h https://invent.kde.org/graphics/krita/-/commit/9ea99d4ab11f4ecd5f5d40c4d298fe4a07e1ce70 Git commit 1aed1cd5b4233324acc71bc6aaf8ef2c890c5621 by Dmitry Kazakov. Committed on 28/02/2024 at 12:56. Pushed by dkazakov into branch 'kazakov/for-5.2'. Fix transform mask updates triggered by transform tool in-stroke When transform mask changes the options of the transform mask it shouldn't trigger static updates when the stroke is running, because the cache is overridden. M +5 -3 libs/image/kis_transform_mask.cpp https://invent.kde.org/graphics/krita/-/commit/1aed1cd5b4233324acc71bc6aaf8ef2c890c5621 Git commit bd8fdd243a3ba864f2c0d1d99ffc8b4d7afc0ff6 by Dmitry Kazakov. Committed on 28/02/2024 at 12:56. Pushed by dkazakov into branch 'kazakov/for-5.2'. Fix transform masks being broken after duplication M +1 -0 plugins/tools/tool_transform2/KisAnimatedTransformMaskParamsHolder.cpp https://invent.kde.org/graphics/krita/-/commit/bd8fdd243a3ba864f2c0d1d99ffc8b4d7afc0ff6 |
Created attachment 162371 [details] Crash report SUMMARY *** STEPS TO REPRODUCE I repeated this steps several times quickly, I am not sure if this alone is what caused the crash. 1. have a raster layer with a trasnform mask on it, move it and scale it. 2. duplicate both 3. click on the transform mask with transform tool and change its position 4. repeat steps 2 and 3 SOFTWARE/OS VERSIONS Windows 10 ADDITIONAL INFORMATION i had a group with raster layers and clipping masks hidden. I was duplicating a merged version of the group several times and moving the duplicates with a transform mask on each of them. At the time of crash I had about 8 layers with transform masks.