Bug 483317 - Disabling multiple layers at once is displayed incrementally
Summary: Disabling multiple layers at once is displayed incrementally
Status: REPORTED
Alias: None
Product: krita
Classification: Applications
Component: Layer Stack (show other bugs)
Version: 5.2.2
Platform: macOS (DMG) macOS
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-03-12 06:40 UTC by Manga Tengu
Modified: 2024-03-20 06:34 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Manga Tengu 2024-03-12 06:40:09 UTC
I'm used to toggle layer visibility to see the difference between what I add and the underlying image.
~Some...~ most of the time "what I add" is on several layers. So I disable them all at once with a keyboard shortcut `toggle layer visibility`
Since a while now (maybe since it got taken into account in undo history) when disabling several layers, I see them being turn off one by one.
This really defeats the toggling effect to see the before/after difference. Enough for me to go and group everything I want to toggle at once (in a group layer).
So then I need to paint in a layer, select the group, toggle, go back to the layer to paint. Even doing so with keyboard shortcuts, this slows down the work, adds mental overhead and "boilerplate" manipulations...



STEPS TO REPRODUCE
1. Create a big canvas like 10k*10k
2. Add something like 5 totally distinguishable layers so you can see the difference while toggeling
3. Select all layers and toggle their visibility at once (I do it with a keyboard shortcut)

OBSERVED RESULT
Layers disappear one by one.

EXPECTED RESULT
Layers disappear all at once.
Yet, hot (instant) coffee appears on ~my~ the table.

Copy pasted from "Report Bug..."
Krita

 Version: 5.2.2
 Hidpi: true
 Sandbox: false

Qt

  Version (compiled): 5.15.7
  Version (loaded): 5.15.7

OS Information

  Build ABI: arm64-little_endian-lp64
  Build CPU: arm64
  CPU: arm64
  Kernel Type: darwin
  Kernel Version: 23.1.0
  Pretty Productname: macOS 14.1
  Product Type: osx
  Product Version: 14.1

Locale

  Languages: en_FR
  C locale: C
  QLocale current: en
  QLocale system: en
  QTextCodec for locale: UTF-8

OpenGL Info
 
  Vendor:  "Apple" 
  Renderer:  "Apple M1 Pro" 
  Driver version:  "4.1 Metal - 88" 
  Shading language:  "4.10" 
  Requested format:  QSurfaceFormat(version 4.1, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CoreProfile) 
  Current format:  QSurfaceFormat(version 4.1, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 32, redBufferSize 8, greenBufferSize 8, blueBufferSize 8, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 0, colorSpace QSurfaceFormat::DefaultColorSpace, profile  QSurfaceFormat::CoreProfile) 
  GL version: 4.1 
  Supports deprecated functions false 
  Is OpenGL ES: false 
  supportsBufferMapping: true 
  supportsBufferInvalidation: false 
  forceDisableTextureBuffers: false 
  Extensions: 
     GL_ARB_texture_gather 
     GL_APPLE_client_storage 
     GL_ARB_shader_subroutine 
     GL_EXT_texture_compression_s3tc 
     GL_ARB_explicit_attrib_location 
     GL_APPLE_container_object_shareable 
     GL_EXT_debug_marker 
     GL_APPLE_row_bytes 
     GL_ARB_internalformat_query 
     GL_ARB_sample_shading 
     GL_ARB_tessellation_shader 
     GL_APPLE_rgb_422 
     GL_ARB_separate_shader_objects 
     GL_EXT_texture_sRGB_decode 
     GL_ARB_draw_buffers_blend 
     GL_ARB_blend_func_extended 
     GL_ARB_instanced_arrays 
     GL_ARB_texture_swizzle 
     GL_APPLE_texture_range 
     GL_ARB_texture_buffer_object_rgb32 
     GL_ARB_texture_storage 
     GL_ARB_vertex_type_2_10_10_10_rev 
     GL_ARB_gpu_shader5 
     GL_ARB_transform_feedback2 
     GL_ARB_transform_feedback3 
     GL_ARB_ES2_compatibility 
     GL_APPLE_flush_render 
     GL_ARB_occlusion_query2 
     GL_NV_texture_barrier 
     GL_ARB_draw_indirect 
     GL_ARB_timer_query 
     GL_EXT_debug_label 
     GL_ARB_gpu_shader_fp64 
     GL_ARB_sampler_objects 
     GL_ARB_shading_language_include 
     GL_ARB_shader_bit_encoding 
     GL_ARB_texture_cube_map_array 
     GL_ARB_texture_rgb10_a2ui 
     GL_ARB_vertex_attrib_64bit 
     GL_EXT_texture_filter_anisotropic 
     GL_ARB_texture_query_lod 
     GL_ARB_viewport_array 
     GL_EXT_framebuffer_multisample_blit_scaled 

QPA OpenGL Detection Info 
  supportsDesktopGL: true 
  supportsOpenGLES: false 
  isQtPreferOpenGLES: true 
  Detected renderers: 
    (Supported) Apple M1 Pro (4.1 Metal - 88)  

useBufferInvalidation (config option): false


Hardware Information

  GPU Acceleration: desktop
  Memory: 32768 Mb
  Number of Cores: 10
  Swap Location: /private/var/folders/f2/hkjj1mk91555bqcv0bd9gtc80000gq/T
  Built for: arm64+neon
  Base instruction set: arm64+neon
  Supported instruction sets: arm64+neon arm32+neon avx512bw avx512dq avx512cd avx512f fma3+avx2 avx2 fma3+avx avx fma4 fma3+sse4.2 sse4.2 sse4.1 ssse3 sse3 sse2 

Current Settings

  Current Swap Location: /private/var/folders/f2/hkjj1mk91555bqcv0bd9gtc80000gq/T
  Current Swap Location writable: true
  Undo Enabled: true
  Undo Stack Limit: 500
  Use OpenGL: true
  Use OpenGL Texture Buffer: false
  Disable Vector Optimizations: false
  Disable AVX Optimizations: false
  Canvas State: OPENGL_SUCCESS
  Autosave Interval: 120
  Use Backup Files: true
  Number of Backups Kept: 1
  Backup File Suffix: ~
  Backup Location: Same Folder as the File
  Backup Location writable: false
  Resource Location: /Users/Nour.Alkotob/Library/Application Support/krita
  Use Win8 Pointer Input: false
  Use RightMiddleTabletButton Workaround: false
  Levels of Detail Enabled: false
  Use Zip64: false
Comment 1 Nick 2024-03-19 07:19:26 UTC
Hi. I have duplicated this on Krita 5.2.2 snap on Kubuntu. I do not believe this is a bug, but might be a performance problem.

On my system (Ryzen 8600G with 32Gb DDR5 RAM, 1080 monitor) I can hide and show 6 10k x10k layers in under a second using a keyboard shortcut. If I repeat the test with a tiny canvas (i.e. 254 x 240px) then the test is instant. My processor is roughly equivalent performance to an M2 so I would expect you to see the same kind of performance on your M1 Pro, possibly better.

Can you please advise how long it takes for your 6 10k layers to show and hide so we can compare? 

Certainly I do see each layer showing and hiding one at a time, but on my system it is fast enough not to be a problem in my opinion.

Thanks
Nick
Comment 2 Manga Tengu 2024-03-20 04:24:16 UTC
Hi Nick,

Definitely not a bug but a perf issue indeed.  I must have missed the category (still can't see where it is set up though).
I have a few points:
- If it can be all toggled at once when in a group layer, maybe it can be even without it? If so, why not improve it as it would mean it's handled in a not optimal way?
- 6 10kpx*10kpx layers takes roughly 3 seconds on my machine. (The laptop itself is in good shape and performs very well when I paint or do computing stuff) If I reduce the image to 500*500, things get instant.
- I think I remember there are quite some macOS perf issues and artifacts. I believe you will observe it way better on macOS. To name a couple that are still bugging: https://bugs.kde.org/show_bug.cgi?id=434131 and https://bugs.kde.org/show_bug.cgi?id=398689
- Even half a second totally ruins the toggling effect to me. In fact, this really feels long and sluggish when working. Seems our opinions diverge there.
Comment 3 Nick 2024-03-20 06:34:38 UTC
Hi - thanks for taking the time to explain it and give the end-users view. The good thing is this problem is easily reproducible, so if this does need additional investigation then a developer should be able to test it easily. For now I'll set this one back to 'reported' and I'd ask for anyone else who is more familiar with Krita to look at this and help determine whether this should be confirmed in as a bug.

Thank
Nick