1. 17 May, 2019 1 commit
    • Øyvind "pippin" Kolås's avatar
      buffer: use internal floorf/ceilf implementations · f1be6fb4
      Øyvind "pippin" Kolås authored
      This avoids both function call overhead and extra checks for values that
      are outside MININT/MAXINT range, for the uses inside GeglBuffer we only
      care about coordinates that are representable as integers - thus these
      inline-able shortcut versions are good enough for us.
      
      The speedup seems to consistently make all samplers about 10% faster
      according to the tests in perf/
      f1be6fb4
  2. 01 Oct, 2018 1 commit
  3. 27 Sep, 2018 2 commits
  4. 19 Sep, 2018 1 commit
    • Øyvind "pippin" Kolås's avatar
      gegl-buffer: always do locking · c8a0b9ef
      Øyvind "pippin" Kolås authored
      This reduces the throughpput of gegl buffer accessors and more slightly in
      the single-threaded case, which is now becoming rare - at least when GEGL
      is operated through GIMP.
      
      Relying less on this dynamically changing parameter from gegl_config()
      will also make it easier to split GeglBuffer out in its own project.
      c8a0b9ef
  5. 11 Jul, 2018 1 commit
  6. 06 Jul, 2018 1 commit
  7. 02 Jul, 2018 1 commit
    • Ell's avatar
      buffer: use gegl_tile_read_{lock,unlock}() when reading tiles · 7fe8beab
      Ell authored
      Use the new gegl_tile_read_lock() and gegl_tile_read_unlock()
      functions, added in the previous commit, before/after reading from
      a tile in a potentially-multithreaded context.
      
      See the previous commit for an explanation of why this is
      necessary.
      
      Note, in particular, that this may make 1x1 gegl_buffer_get()s
      (and NEAREST gegl_buffer_sample()) more expensive, however, NEAREST
      sampler objects amortize the cost of these functions by only
      locking/unlocking the sampler's hot-tile when switching tiles.  As
      a result, a concurrent write to the same buffer may block while the
      sampler object is alive.  We assume that buffers may not be
      written-to while there are active sampler objects constructed for
      them (which can already lead to stale data in the samplers).
      7fe8beab
  8. 11 Jan, 2018 1 commit
  9. 10 Jan, 2018 1 commit
  10. 09 Jan, 2018 1 commit
  11. 15 Dec, 2017 1 commit
    • Ell's avatar
      buffer: use per-instance hot-tile for nearest samplers · 7404ac11
      Ell authored
      In GeglSamplerNearest, use a per-instance hot-tile pointer, rather
      than using the tile-storage's common hot-tile pointer, so that
      sampling from the sampler's hot-tile doesn't require locking the
      tile storage.  This notably improves multithreaded performance of
      ops that use a nearest sampler with a more-or-less regular sampling
      pattern.
      7404ac11
  12. 10 Feb, 2017 1 commit
  13. 06 Feb, 2017 1 commit
  14. 23 Dec, 2016 1 commit
  15. 15 Sep, 2016 1 commit
  16. 11 Jul, 2014 3 commits
  17. 30 Jun, 2014 1 commit
  18. 21 Jun, 2014 1 commit
  19. 20 Jun, 2014 2 commits
  20. 18 Jun, 2014 1 commit
    • Øyvind "pippin" Kolås's avatar
      buffer: stack frame overhead optimizations · 07dc61e1
      Øyvind "pippin" Kolås authored
      When using gegl_buffer_get / gegl_buffer_set and gegl_buffer_sample for
      small/1x1px sized rectangles the overhead of each involved function call
      amounts to more than 2% of time spend processing.
      
      This refactoring involves moving gegl_buffer_sample from gegl-buffer.c to
      gegl-sampler.c to make them live in the same compilation unit. Replacing
      internal nested chains of function calls with added complexity with an
      inlinable implementation using switches.
      07dc61e1
  21. 17 Jun, 2014 1 commit
    • Øyvind "pippin" Kolås's avatar
      sampler: make size of cache in sampler base class adaptive · de26038e
      Øyvind "pippin" Kolås authored
      Implement an adaptive caching policy; that meets the needs of affine
      transformations. Running averages are kept of x/y deltas as well as the
      magnitudes of the deltas of coordinates leading to cache misses.
      
      The initial rectangle used is a small one; subsequent rectangles have extents
      up to 64 pixels wide/tall; when tracked deltas are more diagonal than axis
      aligned smaller more square regions are tracked.
      de26038e
  22. 15 Jun, 2014 3 commits
  23. 11 Jun, 2014 2 commits
  24. 04 Mar, 2014 2 commits
  25. 27 Nov, 2012 1 commit
  26. 24 Nov, 2012 6 commits
  27. 23 Nov, 2012 1 commit