linux/drivers/media/platform
Kirill Smelkov 13908f330f [media] vivi: Move computations out of vivi_fillbuf linecopy loop
The "dev->mvcount % wmax" thing was showing high in profiles (we do it
for each line which ~ 500 per frame)
           ?     000010c0 <vivi_fillbuff>:
                 ...
      0,39 ? 70:???mov    0x3ff4(%edi),%esi
      0,22 ? 76:?  mov    0x2a0(%edi),%eax
      0,30 ?    ?  mov    -0x84(%ebp),%ebx
      0,35 ?    ?  mov    %eax,%edx
      0,04 ?    ?  mov    -0x7c(%ebp),%ecx
      0,35 ?    ?  sar    $0x1f,%edx
      0,44 ?    ?  idivl  -0x7c(%ebp)
     21,68 ?    ?  imul   %esi,%ecx
      0,70 ?    ?  imul   %esi,%ebx
      0,52 ?    ?  add    -0x88(%ebp),%ebx
      1,65 ?    ?  mov    %ebx,%eax
      0,22 ?    ?  imul   %edx,%esi
      0,04 ?    ?  lea    0x3f4(%edi,%esi,1),%edx
      2,18 ?    ?? call   vivi_fillbuff+0xa6
      0,74 ?    ?  addl   $0x1,-0x80(%ebp)
     62,69 ?    ?  mov    -0x7c(%ebp),%edx
      1,18 ?    ?  mov    -0x80(%ebp),%ecx
      0,35 ?    ?  add    %edx,-0x84(%ebp)
      0,61 ?    ?  cmp    %ecx,-0x8c(%ebp)
      0,22 ?    ???jne    70
so since all variables stay the same for all iterations let's move
computations out of the loop: the abovementioned division and
"width*pixelsize" too
before:
    # cmdline : /home/kirr/local/perf/bin/perf record -g -a sleep 20
    #
    # Samples: 49K of event 'cycles'
    # Event count (approx.): 16475832370
    #
    # Overhead          Command           Shared Object
    # ........  ...............  ......................
    #
        29.07%             rawv  libc-2.13.so            [.] __memcpy_ssse3
        20.57%           vivi-*  [kernel.kallsyms]       [k] memcpy
        10.20%             Xorg  [unknown]               [.] 0xa7301494
         5.16%           vivi-*  [vivi]                  [k] gen_text.constprop.6
         4.43%             rawv  [vivi]                  [k] gen_twopix
         4.36%           vivi-*  [vivi]                  [k] vivi_fillbuff
         2.42%             rawv  [vivi]                  [k] precalculate_line
         1.33%          swapper  [kernel.kallsyms]       [k] read_hpet
after:
    # cmdline : /home/kirr/local/perf/bin/perf record -g -a sleep 20
    #
    # Samples: 46K of event 'cycles'
    # Event count (approx.): 15574200568
    #
    # Overhead          Command         Shared Object
    # ........  ...............  ....................
    #
        27.99%             rawv  libc-2.13.so          [.] __memcpy_ssse3
        23.29%           vivi-*  [kernel.kallsyms]     [k] memcpy
        10.30%             Xorg  [unknown]             [.] 0xa75c98f8
         5.34%           vivi-*  [vivi]                [k] gen_text.constprop.6
         4.61%             rawv  [vivi]                [k] gen_twopix
         2.64%             rawv  [vivi]                [k] precalculate_line
         1.37%          swapper  [kernel.kallsyms]     [k] read_hpet
         0.79%             Xorg  [kernel.kallsyms]     [k] read_hpet
         0.64%             Xorg  [kernel.kallsyms]     [k] unix_poll
         0.45%             Xorg  [kernel.kallsyms]     [k] fget_light
         0.43%             rawv  libxcb.so.1.1.0       [.] 0x0000aae9
         0.40%            runsv  [kernel.kallsyms]     [k] ext2_try_to_allocate
         0.36%             Xorg  [kernel.kallsyms]     [k] _raw_spin_lock_irqsave
         0.31%           vivi-*  [vivi]                [k] vivi_fillbuff
(i.e. vivi_fillbuff own overhead is almost gone)

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2012-12-21 18:25:43 -02:00
..
blackfin [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
davinci [media] davinci: vpbe: remove unused variable in vpbe_initialize() 2012-12-21 14:23:09 -02:00
exynos-gsc [media] exynos-gsc: modify number of output/capture buffers 2012-12-21 10:26:44 -02:00
marvell-ccic
omap [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
omap3isp [media] v4l: Tell user space we're using monotonic timestamps 2012-12-21 11:20:51 -02:00
s3c-camif [media] V4L: Add driver for S3C24XX/S3C64XX SoC series camera interface 2012-11-28 09:43:34 -02:00
s5p-fimc [media] s5p-fimc: Improved pipeline try format routine 2012-12-21 13:58:31 -02:00
s5p-g2d
s5p-jpeg
s5p-mfc Linux 3.7-rc8 2012-12-04 10:46:21 -02:00
s5p-tv [media] v4l: s5p-tv: mixer: support for dmabuf exporting 2012-11-25 17:21:51 -02:00
soc_camera [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
arv.c
coda.c [media] media: coda: Fix H.264 header alignment - v2 2012-12-21 16:56:31 -02:00
coda.h
fsl-viu.c [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
indycam.c
indycam.h
Kconfig [media] media: add a VEU MEM2MEM format conversion and scaling driver 2012-12-20 14:23:10 -02:00
m2m-deinterlace.c [media] media: m2m-deinterlace: Do not set debugging flag to true 2012-12-21 18:25:07 -02:00
Makefile [media] media: add a VEU MEM2MEM format conversion and scaling driver 2012-12-20 14:23:10 -02:00
mem2mem_testdev.c [media] v4l: mem2mem_testdev: add support for dmabuf importing 2012-11-25 17:19:45 -02:00
mx2_emmaprp.c [media] [3.6.0-,3/5] media/mx2_emmaprp: use module_platform_driver macro 2012-10-27 11:35:11 -02:00
omap24xxcam-dma.c
omap24xxcam.c [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
omap24xxcam.h
sh_veu.c [media] sh_veu.c: fix two compilation warnings 2012-12-20 14:55:12 -02:00
sh_vou.c [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
timblogiw.c [media] v4l: Convert drivers to use monotonic timestamps 2012-12-21 10:56:43 -02:00
via-camera.c
via-camera.h
vino.c [media] v4l: Tell user space we're using monotonic timestamps 2012-12-21 11:20:51 -02:00
vino.h
vivi.c [media] vivi: Move computations out of vivi_fillbuf linecopy loop 2012-12-21 18:25:43 -02:00