After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 736176 - pngparse: re-assembling image from small blocks may be optimized
pngparse: re-assembling image from small blocks may be optimized
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Linux
: Normal enhancement
: 1.5.1
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2014-09-06 07:20 UTC by Mikhail
Modified: 2014-11-09 23:41 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
screenshot of htop (275.53 KB, image/png)
2014-09-06 07:31 UTC, Mikhail
Details
htop demonstrate - rhythmbox normal import process (273.84 KB, image/png)
2014-09-06 07:53 UTC, Mikhail
Details
htop - pngparse high load CPU (278.56 KB, image/png)
2014-09-06 07:56 UTC, Mikhail
Details

Description Mikhail 2014-09-06 07:20:07 UTC
$ rpm -q rhythmbox
rhythmbox-3.0.3-4.fc21.x86_64

^C
Program received signal SIGINT, Interrupt.
0x00007fa40c4748a1 in __GI_ppoll (fds=0x15e6590, nfds=1, timeout=<optimized out>, sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:56
56	      result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask,
(gdb) thread apply all bt

Thread 7 (Thread 0x7fa402ce2700 (LWP 8576))

  • #0 read
    at ../sysdeps/unix/syscall-template.S line 81
  • #1 read
    at /usr/include/bits/unistd.h line 44
  • #2 gst_file_src_fill
    at gstfilesrc.c line 352
  • #3 gst_base_src_default_create
    at gstbasesrc.c line 1471
  • #4 gst_base_src_get_range
    at gstbasesrc.c line 2445
  • #5 gst_base_src_getrange
    at gstbasesrc.c line 2613
  • #6 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #7 gst_pad_pull_range
    at gstpad.c line 4502
  • #8 gst_proxy_pad_getrange_default
    at gstghostpad.c line 184
  • #9 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #10 gst_pad_pull_range
    at gstpad.c line 4502
  • #11 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #12 gst_pad_pull_range
    at gstpad.c line 4502
  • #13 gst_base_parse_pull_range
    at gstbaseparse.c line 2950
  • #14 gst_base_parse_scan_frame
    at gstbaseparse.c line 3086
  • #15 gst_base_parse_loop
    at gstbaseparse.c line 3194
  • #16 gst_task_func
    at gsttask.c line 317
  • #17 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #18 g_thread_proxy
    at gthread.c line 764
  • #19 start_thread
    at pthread_create.c line 310
  • #20 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 6 (Thread 0x7fa3f2f0a700 (LWP 8522))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait_until
    at gthread-posix.c line 1437
  • #2 g_async_queue_pop_intern_unlocked
    at gasyncqueue.c line 422
  • #3 g_async_queue_timeout_pop
    at gasyncqueue.c line 543
  • #4 g_thread_pool_wait_for_new_pool
    at gthreadpool.c line 167
  • #5 g_thread_pool_thread_proxy
    at gthreadpool.c line 364
  • #6 g_thread_proxy
    at gthread.c line 764
  • #7 start_thread
    at pthread_create.c line 310
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 2 (Thread 0x7fa401e62700 (LWP 8470))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_task_func
    at gsttask.c line 302
  • #3 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #4 g_thread_proxy
    at gthread.c line 764
  • #5 start_thread
    at pthread_create.c line 310
  • #6 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109
(gdb) 
(gdb) 
(gdb)
Comment 1 Mikhail 2014-09-06 07:21:00 UTC
^C
Program received signal SIGINT, Interrupt.
0x00007fa40c4748a1 in __GI_ppoll (fds=0x15f55b0, nfds=1, timeout=<optimized out>, sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:56
56	      result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask,
(gdb) thread apply all bt

Thread 6 (Thread 0x7fa3f2f0a700 (LWP 8522))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_task_func
    at gsttask.c line 302
  • #3 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #4 g_thread_proxy
    at gthread.c line 764
  • #5 start_thread
    at pthread_create.c line 310
  • #6 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 4 (Thread 0x7fa402ce2700 (LWP 7569))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait_until
    at gthread-posix.c line 1437
  • #2 g_async_queue_pop_intern_unlocked
    at gasyncqueue.c line 422
  • #3 g_async_queue_timeout_pop
    at gasyncqueue.c line 543
  • #4 g_thread_pool_wait_for_new_pool
    at gthreadpool.c line 167
  • #5 g_thread_pool_thread_proxy
    at gthreadpool.c line 364
  • #6 g_thread_proxy
    at gthread.c line 764
  • #7 start_thread
    at pthread_create.c line 310
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 2 (Thread 0x7fa401e62700 (LWP 8470))

  • #0 read
    at ../sysdeps/unix/syscall-template.S line 81
  • #1 read
    at /usr/include/bits/unistd.h line 44
  • #2 gst_file_src_fill
    at gstfilesrc.c line 352
  • #3 gst_base_src_default_create
    at gstbasesrc.c line 1471
  • #4 gst_base_src_get_range
    at gstbasesrc.c line 2445
  • #5 gst_base_src_getrange
    at gstbasesrc.c line 2613
  • #6 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #7 gst_pad_pull_range
    at gstpad.c line 4502
  • #8 gst_proxy_pad_getrange_default
    at gstghostpad.c line 184
  • #9 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #10 gst_pad_pull_range
    at gstpad.c line 4502
  • #11 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #12 gst_pad_pull_range
    at gstpad.c line 4502
  • #13 gst_base_parse_pull_range
    at gstbaseparse.c line 2950
  • #14 gst_base_parse_scan_frame
    at gstbaseparse.c line 3086
  • #15 gst_base_parse_loop
    at gstbaseparse.c line 3194
  • #16 gst_task_func
    at gsttask.c line 317
  • #17 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #18 g_thread_proxy
    at gthread.c line 764
  • #19 start_thread
    at pthread_create.c line 310
  • #20 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Comment 2 Mikhail 2014-09-06 07:21:50 UTC
Got object file from memory but can't read symbols: File truncated.
0x00007fa40c4748a1 in __GI_ppoll (fds=0x15f8fe0, nfds=1, timeout=<optimized out>, sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:56
56	      result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask,
(gdb) thread apply all bt

Thread 4 (Thread 0x7fa402ce2700 (LWP 7569))

  • #0 read
    at ../sysdeps/unix/syscall-template.S line 81
  • #1 read
    at /usr/include/bits/unistd.h line 44
  • #2 gst_file_src_fill
    at gstfilesrc.c line 352
  • #3 gst_base_src_default_create
    at gstbasesrc.c line 1471
  • #4 gst_base_src_get_range
    at gstbasesrc.c line 2445
  • #5 gst_base_src_getrange
    at gstbasesrc.c line 2613
  • #6 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #7 gst_pad_pull_range
    at gstpad.c line 4502
  • #8 gst_proxy_pad_getrange_default
    at gstghostpad.c line 184
  • #9 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #10 gst_pad_pull_range
    at gstpad.c line 4502
  • #11 gst_pad_get_range_unchecked
    at gstpad.c line 4263
  • #12 gst_pad_pull_range
    at gstpad.c line 4502
  • #13 gst_base_parse_pull_range
    at gstbaseparse.c line 2950
  • #14 gst_base_parse_scan_frame
    at gstbaseparse.c line 3086
  • #15 gst_base_parse_loop
    at gstbaseparse.c line 3194
  • #16 gst_task_func
    at gsttask.c line 317
  • #17 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #18 g_thread_proxy
    at gthread.c line 764
  • #19 start_thread
    at pthread_create.c line 310
  • #20 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 3 (Thread 0x7fa3f2f0a700 (LWP 8408))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait_until
    at gthread-posix.c line 1437
  • #2 g_async_queue_pop_intern_unlocked
    at gasyncqueue.c line 422
  • #3 g_async_queue_timeout_pop
    at gasyncqueue.c line 543
  • #4 g_thread_pool_wait_for_new_pool
    at gthreadpool.c line 167
  • #5 g_thread_pool_thread_proxy
    at gthreadpool.c line 364
  • #6 g_thread_proxy
    at gthread.c line 764
  • #7 start_thread
    at pthread_create.c line 310
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 2 (Thread 0x7fa401e62700 (LWP 8470))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_task_func
    at gsttask.c line 302
  • #3 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #4 g_thread_proxy
    at gthread.c line 764
  • #5 start_thread
    at pthread_create.c line 310
  • #6 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Comment 3 Jonathan Matthew 2014-09-06 07:24:28 UTC
This is not a useful bug report.  What am I supposed to do with these stack traces?
Comment 4 Mikhail 2014-09-06 07:30:30 UTC
Ok, how make this report useful? What information you need?


I hope what in stack trace you see why CPU high load.

(gdb) thread apply all bt

Thread 96 (Thread 0x7fff8b1dc700 (LWP 10140))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait_until
    at gthread-posix.c line 1437
  • #2 g_async_queue_pop_intern_unlocked
    at gasyncqueue.c line 422
  • #3 g_async_queue_timeout_pop
    at gasyncqueue.c line 543
  • #4 g_thread_pool_wait_for_new_pool
    at gthreadpool.c line 167
  • #5 g_thread_pool_thread_proxy
    at gthreadpool.c line 364
  • #6 g_thread_proxy
    at gthread.c line 764
  • #7 start_thread
    at pthread_create.c line 310
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 62 (Thread 0x7fffd8969700 (LWP 9967))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_queue_chain
    at gstqueue.c line 1028
  • #3 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #4 gst_pad_push_data
    at gstpad.c line 4069
  • #5 gst_pad_push
    at gstpad.c line 4180
  • #6 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #7 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #8 gst_pad_push_data
    at gstpad.c line 4069
  • #9 gst_stream_synchronizer_sink_chain
    at gststreamsynchronizer.c line 577
  • #10 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #11 gst_pad_push_data
    at gstpad.c line 4069
  • #12 gst_tee_handle_data
    at gsttee.c line 634
  • #13 gst_tee_chain
    at gsttee.c line 735
  • #14 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #15 gst_pad_push_data
    at gstpad.c line 4069
  • #16 gst_pad_push
    at gstpad.c line 4180
  • #17 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #18 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #19 gst_pad_push_data
    at gstpad.c line 4069
  • #20 gst_selector_pad_chain
    at gstinputselector.c line 1098
  • #21 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #22 gst_pad_push_data
    at gstpad.c line 4069
  • #23 gst_pad_push
    at gstpad.c line 4180
  • #24 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #25 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #26 gst_pad_push_data
    at gstpad.c line 4069
  • #27 gst_pad_push
    at gstpad.c line 4180
  • #28 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #29 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #30 gst_pad_push_data
    at gstpad.c line 4069
  • #31 gst_audio_decoder_push_forward
    at gstaudiodecoder.c line 973
  • #32 gst_audio_decoder_output
    at gstaudiodecoder.c line 1049
  • #33 gst_audio_decoder_finish_frame
    at gstaudiodecoder.c line 1281
  • #34 gst_flac_dec_write
    at gstflacdec.c line 693
  • #35 gst_flac_dec_write_stream
    at gstflacdec.c line 715
  • #36 write_audio_frame_to_client_
    at stream_decoder.c line 2939
  • #37 read_frame_
    at stream_decoder.c line 2111
  • #38 FLAC__stream_decoder_process_single
    at stream_decoder.c line 1039
  • #39 gst_flac_dec_handle_frame
    at gstflacdec.c line 783
  • #40 gst_audio_decoder_push_buffers
    at gstaudiodecoder.c line 1416
  • #41 gst_audio_decoder_chain_forward
    at gstaudiodecoder.c line 1519
  • #42 gst_audio_decoder_chain
    at gstaudiodecoder.c line 1798
  • #43 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #44 gst_pad_push_data
    at gstpad.c line 4069
  • #45 gst_base_parse_push_frame
    at gstbaseparse.c line 2302
  • #46 gst_base_parse_handle_and_push_frame
    at gstbaseparse.c line 2134
  • #47 gst_base_parse_finish_frame
    at gstbaseparse.c line 2459
  • #48 gst_flac_parse_handle_frame
    at gstflacparse.c line 870
  • #49 gst_base_parse_handle_buffer
    at gstbaseparse.c line 1961
  • #50 gst_base_parse_scan_frame
    at gstbaseparse.c line 3121
  • #51 gst_base_parse_loop
    at gstbaseparse.c line 3194
  • #52 gst_task_func
    at gsttask.c line 317
  • #53 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #54 g_thread_proxy
    at gthread.c line 764
  • #55 start_thread
    at pthread_create.c line 310
  • #56 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 30 (Thread 0x7fff8b9dd700 (LWP 9908))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_queue_chain
    at gstqueue.c line 1028
  • #3 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #4 gst_pad_push_data
    at gstpad.c line 4069
  • #5 gst_tee_handle_data
    at gsttee.c line 634
  • #6 gst_tee_chain
    at gsttee.c line 735
  • #7 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #8 gst_pad_push_data
    at gstpad.c line 4069
  • #9 gst_pad_push
    at gstpad.c line 4180
  • #10 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #11 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #12 gst_pad_push_data
    at gstpad.c line 4069
  • #13 gst_base_transform_chain
    at gstbasetransform.c line 2260
  • #14 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #15 gst_pad_push_data
    at gstpad.c line 4069
  • #16 gst_base_transform_chain
    at gstbasetransform.c line 2260
  • #17 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #18 gst_pad_push_data
    at gstpad.c line 4069
  • #19 gst_pad_push
    at gstpad.c line 4180
  • #20 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #21 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #22 gst_pad_push_data
    at gstpad.c line 4069
  • #23 gst_pad_push
    at gstpad.c line 4180
  • #24 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #25 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #26 gst_pad_push_data
    at gstpad.c line 4069
  • #27 gst_pad_push
    at gstpad.c line 4180
  • #28 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #29 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #30 gst_pad_push_data
    at gstpad.c line 4069
  • #31 gst_base_transform_chain
    at gstbasetransform.c line 2260
  • #32 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #33 gst_pad_push_data
    at gstpad.c line 4069
  • #34 gst_base_transform_chain
    at gstbasetransform.c line 2260
  • #35 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #36 gst_pad_push_data
    at gstpad.c line 4069
  • #37 gst_pad_push
    at gstpad.c line 4180
  • #38 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #39 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #40 gst_pad_push_data
    at gstpad.c line 4069
  • #41 gst_queue_push_one
    at gstqueue.c line 1132
  • #42 gst_queue_loop
    at gstqueue.c line 1261
  • #43 gst_task_func
    at gsttask.c line 317
  • #44 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #45 g_thread_proxy
    at gthread.c line 764
  • #46 start_thread
    at pthread_create.c line 310
  • #47 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 29 (Thread 0x7fffc9a81700 (LWP 9907))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_task_func
    at gsttask.c line 302
  • #3 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #4 g_thread_proxy
    at gthread.c line 764
  • #5 start_thread
    at pthread_create.c line 310
  • #6 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109

Thread 27 (Thread 0x7fffa3fff700 (LWP 9905))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at gthread-posix.c line 1390
  • #2 gst_base_sink_wait_preroll
    at gstbasesink.c line 2151
  • #3 gst_audio_base_sink_render
    at gstaudiobasesink.c line 1940
  • #4 gst_base_sink_chain_unlocked
    at gstbasesink.c line 3425
  • #5 gst_base_sink_chain_main
    at gstbasesink.c line 3533
  • #6 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #7 gst_pad_push_data
    at gstpad.c line 4069
  • #8 gst_pad_push
    at gstpad.c line 4180
  • #9 gst_proxy_pad_chain_default
    at gstghostpad.c line 126
  • #10 gst_pad_chain_data_unchecked
    at gstpad.c line 3836
  • #11 gst_pad_push_data
    at gstpad.c line 4069
  • #12 gst_queue_push_one
    at gstqueue.c line 1132
  • #13 gst_queue_loop
    at gstqueue.c line 1261
  • #14 gst_task_func
    at gsttask.c line 317
  • #15 g_thread_pool_thread_proxy
    at gthreadpool.c line 307
  • #16 g_thread_proxy
    at gthread.c line 764
  • #17 start_thread
    at pthread_create.c line 310
  • #18 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 109
(gdb) 
(gdb)
Comment 5 Mikhail 2014-09-06 07:31:07 UTC
Created attachment 285552 [details]
screenshot of htop
Comment 6 Jonathan Matthew 2014-09-06 07:37:35 UTC

(In reply to comment #4)
> Ok, how make this report useful? What information you need?

You could start by describing the problem.  What does 'CPU high load' mean?  Why do you think it's a problem rather than the normal state?  Is it higher than it was in a previous version, and if so, what version?  Does it take longer to import a given number of tracks than a previous version?

Your stack traces seem to be from the metadata helper process.  Is that the one that's using all the cpu time?  How much is the main process using?

> I hope what in stack trace you see why CPU high load.

No, stack traces are not useful for this.
Comment 7 Mikhail 2014-09-06 07:41:32 UTC
(In reply to comment #6)
> You could start by describing the problem.  What does 'CPU high load' mean? 
> Why do you think it's a problem rather than the normal state?  Is it higher
> than it was in a previous version, and if so, what version?  Does it take
> longer to import a given number of tracks than a previous version?

I am attach htop screenshot. It demonstrate why I thought what CPU load is high. I see high cpu using by kernel (red bar) it's not normal.
Comment 8 Jonathan Matthew 2014-09-06 07:45:46 UTC
Your htop screenshot shows CPU usage for the previous two seconds.  Is it like that for the entire import process?

Please answer the rest of my questions too.
Comment 9 Mikhail 2014-09-06 07:52:08 UTC
(In reply to comment #8)
> Your htop screenshot shows CPU usage for the previous two seconds.  Is it like
> that for the entire import process?

Yes.

I see what import process stuck on each png file, and CPU became high load.

> Please answer the rest of my questions too.
> Is it higher than it was in a previous version, and if so, what version?
$ rpm -q rhythmbox
rhythmbox-3.0.3-4.fc21.x86_64

I don't know about previous version because not use rhythmbox before.
Comment 10 Mikhail 2014-09-06 07:53:30 UTC
Created attachment 285556 [details]
htop demonstrate - rhythmbox normal import process
Comment 11 Mikhail 2014-09-06 07:55:26 UTC
pngparse stuck import process maybe more informative.
Comment 12 Mikhail 2014-09-06 07:56:51 UTC
Created attachment 285557 [details]
htop - pngparse high load CPU
Comment 13 Jonathan Matthew 2014-09-06 08:00:21 UTC
Screenshots from htop really aren't very helpful.

(In reply to comment #9)
> I see what import process stuck on each png file, and CPU became high load.

Why is this information in comment 9 rather than the initial report?
Comment 14 Mikhail 2014-09-06 08:02:58 UTC
(In reply to comment #13)
> Screenshots from htop really aren't very helpful.
> 
> (In reply to comment #9)
> > I see what import process stuck on each png file, and CPU became high load.
> 
> Why is this information in comment 9 rather than the initial report?

Sorry, I hurried to capture the stack trace.
Comment 15 Jonathan Matthew 2014-09-06 08:07:30 UTC
Can you find one of the problematic png files and run 'GST_DEBUG=*:3 GST_DEBUG_NO_COLOR=1 gst-discoverer-1.0 /path/to/file.png' on it, and attach the output here?

(In reply to comment #14)
> 
> Sorry, I hurried to capture the stack trace.

It's not a race.
Comment 16 Mikhail 2014-09-06 14:30:31 UTC
(In reply to comment #15)
> Can you find one of the problematic png files and run 'GST_DEBUG=*:3
> GST_DEBUG_NO_COLOR=1 gst-discoverer-1.0 /path/to/file.png' on it, and attach
> the output here?
> 

$ GST_DEBUG_NO_COLOR=1 gst-discoverer-1.0 /home/mikhail/Music/Untitled\ Folder/Pet\ Shop\ Boys\ \(Japanese\ Press\)/1990\ -\ Behaviour/Scans/booklet2-3.png
Analyzing file:///home/mikhail/Music/Untitled%20Folder/Pet%20Shop%20Boys%20(Japanese%20Press)/1990%20-%20Behaviour/Scans/booklet2-3.png
Done discovering file:///home/mikhail/Music/Untitled%20Folder/Pet%20Shop%20Boys%20(Japanese%20Press)/1990%20-%20Behaviour/Scans/booklet2-3.png
Analyzing URI timed out
Comment 18 Jonathan Matthew 2014-09-08 03:30:18 UTC
So you have 4125x5490 PNG images and you're surprised it takes a while to read them?
Comment 19 Mikhail 2014-09-08 03:40:22 UTC
(In reply to comment #18)
> So you have 4125x5490 PNG images and you're surprised it takes a while to read
> them?

Shotwell and GNOME image viewer works with this image very fast.
Comment 20 Jonathan Matthew 2014-09-08 04:01:01 UTC
reassigning to gstreamer in case they feel like looking at this.  What versions of gstreamer, gst-plugins-base and gst-plugins-good do you have?
Comment 21 Nicolas Dufresne (ndufresne) 2014-09-08 13:20:05 UTC
I confirm pngparse takes around 30 seconds, and pngdec around 10s.

time gst-launch-1.0 filesrc location=my.png ! pngparse ! fakesink
time gst-launch-1.0 filesrc location=my.png ! pngdec ! fakesink

Though, if you increase the block size significantly, it's similar to other software:

time gst-launch-1.0 filesrc blocksize=100000000 ! pngparse ! fakesink

I think there is room for improvement for reassembling png from small blocks, though this seems rather low priority. The old 4K default block size is a bit out of date, application should most likely use large blocks.
Comment 22 Mikhail 2014-09-08 13:47:22 UTC
(In reply to comment #20)
> reassigning to gstreamer in case they feel like looking at this.  What versions
> of gstreamer, gst-plugins-base and gst-plugins-good do you have?

[mikhail@localhost ~]$ rpm -q gstreamer
gstreamer-0.10.36-10.fc21.x86_64
gstreamer-0.10.36-10.fc21.i686
[mikhail@localhost ~]$ rpm -q gstreamer-plugins-good 
gstreamer-plugins-good-0.10.31-13.fc21.x86_64
[mikhail@localhost ~]$ rpm -q gstreamer-plugins-base 
gstreamer-plugins-base-0.10.36-11.fc21.x86_64
gstreamer-plugins-base-0.10.36-11.fc21.i686
Comment 23 Nicolas Dufresne (ndufresne) 2014-09-08 14:35:08 UTC
(In reply to comment #22)
> (In reply to comment #20)
> > reassigning to gstreamer in case they feel like looking at this.  What versions
> > of gstreamer, gst-plugins-base and gst-plugins-good do you have?
> 
> [mikhail@localhost ~]$ rpm -q gstreamer
> gstreamer-0.10.36-10.fc21.x86_64
> gstreamer-0.10.36-10.fc21.i686
> [mikhail@localhost ~]$ rpm -q gstreamer-plugins-good 
> gstreamer-plugins-good-0.10.31-13.fc21.x86_64
> [mikhail@localhost ~]$ rpm -q gstreamer-plugins-base 
> gstreamer-plugins-base-0.10.36-11.fc21.x86_64
> gstreamer-plugins-base-0.10.36-11.fc21.i686

This version will remain the way it is, it's dead/unmaintained. Rhythmbox uses gstreamer 1.X, though no need to provide us with the version you are running on Rawhide, we can figure-it out by ourself. Nevertheless, thanks for reporting, we'll try and improve this in the feature, even though this isn't high priority. It is up to you to try and convince rhythmbox maintainer to increase the filesrc block size.
Comment 24 Jonathan Matthew 2014-09-08 22:48:35 UTC
Rhythmbox is just using GstDiscoverer at the point where this is happening.  If setting a larger block size makes it work better in general, then GstDiscoverer should do that itself.
Comment 25 Nicolas Dufresne (ndufresne) 2014-09-08 23:38:05 UTC
(In reply to comment #24)
> Rhythmbox is just using GstDiscoverer at the point where this is happening.  If
> setting a larger block size makes it work better in general, then GstDiscoverer
> should do that itself.

This or fix this bug, whoever provide a patch first I suppose.
Comment 26 Tim-Philipp Müller 2014-11-06 13:37:38 UTC
I have a patch for this.
Comment 27 Vineeth 2014-11-06 14:16:01 UTC
Is there any chance that pngdec got improved with the patch in below bug?


https://bugzilla.gnome.org/show_bug.cgi?id=737708
Comment 28 Tim-Philipp Müller 2014-11-09 23:41:19 UTC
commit 6e3518dfd68d775d530bb6c4835b3e0b0e224e16
Author: Tim-Philipp Müller <tim@centricular.com>
Date:   Sun Nov 9 20:53:34 2014 +0000

    pngparse: optimise reading of png files
    
    Read PNG data chunk in one go by letting the parser
    base class know the size we need, so that it doesn't
    drip-feed us small chunks of data (causing a lot of
    reallocs and memcpy in the process) until we have
    everything.
    
    Improves parsing performance of very large PNG files
    (65MB) from ~13 seconds to a couple of millisecs.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=736176