Slow startup with a directory containing a lot of images

Open
#245 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
c

Research direction

Reproduce the delay with a directory containing about 17k images, then review the supplied profile around xviewer_job_model_run, directory_visit, and xviewer_list_store_append_di. Compare startup behavior before and after the change, with completion shown by a substantially faster window display for this workload.

Written by the indexing model from the issue text.

Description

==version==
xviewer 3.4.16
mint: 22.3 x64

I have a directory in my home directory (on SSD) with about 17k images synced from my phone.

caja loads the directory in about 6 seconds cold, about 3 seconds hot.

Clicking on an image in caja launches xviewer which takes ~17 seconds to display a window.

Samples: 86K of event 'cycles:P', Event count (approx.): 91442541114
  Children      Self  Command       Shared Object                   Symbol
+   98.19%     0.00%  xviewer       libc.so.6                       [.] clone3
+   98.19%     0.00%  xviewer       libc.so.6                       [.] start_thread
+   98.19%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa0afe62
+   98.13%     0.00%  xviewer       libxviewer.so                   [.] xviewer_job_scheduler
+   98.13%     0.00%  xviewer       libxviewer.so                   [.] xviewer_job_process
+   98.13%     0.00%  xviewer       libxviewer.so                   [.] xviewer_job_run
+   91.62%     0.00%  xviewer       libxviewer.so                   [.] xviewer_job_model_run
+   91.61%     0.00%  xviewer       libxviewer.so                   [.] xviewer_list_store_add_files
+   91.57%     0.00%  xviewer       libxviewer.so                   [.] xviewer_list_store_append_di
+   90.81%     0.00%  xviewer       libxviewer.so                   [.] directory_visit
+   90.69%     0.00%  xviewer       libxviewer.so                   [.] xviewer_list_store_append_im
+   90.64%     0.00%  xviewer       libxviewer.so                   [.] xviewer_list_store_append_im
+   90.49%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] gtk_list_store_set
+   90.48%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] gtk_list_store_set_valist
+   67.56%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] 0x00007eacf9a2c664
+   27.15%    11.18%  xviewer       libglib-2.0.so.0.8000.0         [.] g_hash_table_insert
+   27.12%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] 0x00007eacf97fe5fe
+   21.27%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] 0x00007eacf9a2c686
+   18.10%    17.71%  xviewer       libglib-2.0.so.0.8000.0         [.] g_sequence_iter_next
+   12.34%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa06d5e7
+   10.39%    10.08%  xviewer       libglib-2.0.so.0.8000.0         [.] g_hash_table_lookup
+   10.31%     0.00%  xviewer       libgtk-3.so.0.2409.32           [.] 0x00007eacf97fe66f
+    6.73%     5.73%  xviewer       libglib-2.0.so.0.8000.0         [.] g_sequence_iter_is_end
+    6.06%     0.00%  xviewer       libxviewer.so                   [.] xviewer_job_thumbnail_run
+    6.06%     0.00%  xviewer       libxviewer.so                   [.] xviewer_thumbnail_add_frame
+    6.06%     0.00%  xviewer       libxviewer.so                   [.] xviewer_thumbnail_stretch_fr
+    6.05%     0.01%  xviewer       libxviewer.so                   [.] draw_frame_row
+    6.03%     0.01%  xviewer       libglib-2.0.so.0.8000.0         [.] g_log
+    5.97%     0.04%  xviewer       libglib-2.0.so.0.8000.0         [.] g_logv
+    5.82%     0.01%  xviewer       libglib-2.0.so.0.8000.0         [.] g_log_default_handler
+    5.79%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] g_log_structured_array
+    5.77%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] g_log_writer_default
+    5.76%     0.01%  xviewer       libglib-2.0.so.0.8000.0         [.] g_log_writer_standard_stream
+    4.80%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa09b6d4
+    4.78%     4.78%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00000000000776d0
+    3.46%     0.00%  xviewer       libc.so.6                       [.] __fprintf_chk
+    3.45%     0.02%  xviewer       libc.so.6                       [.] __vfprintf_internal
+    3.34%     0.02%  xviewer       libc.so.6                       [.] _IO_file_xsputn@@GLIBC_2.2.5
+    3.31%     0.01%  xviewer       libc.so.6                       [.] _IO_file_write@@GLIBC_2.2.5
+    3.30%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa09b6d0
+    3.30%     0.04%  xviewer       libc.so.6                       [.] __GI___libc_write
+    3.27%     3.27%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00000000000776ba
+    3.17%     0.02%  xviewer       [unknown]                       [k] 0xffffffffb2000130
+    3.15%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa09b6e0
+    3.13%     3.13%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00000000000776de
+    3.01%     0.01%  xviewer       [unknown]                       [k] 0xffffffffb1e52e37
+    2.96%     0.00%  xviewer       libglib-2.0.so.0.8000.0         [.] 0x00007eacfa068683

Dominant language
C
Stars
92
Forks
47
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from linuxmint/xviewer

All issues in linuxmint/xviewer

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.