1. 19 May, 2019 1 commit
    • Ell's avatar
      buffer: in swap backend, fix queued compressed-tile cost · a79978a4
      Ell authored
      In GeglTileBackendSwap, when compressing a queued tile while
      waiting for sufficient queue space, we allocate a tile-sized buffer
      to hold the compressed data (since we don't know the compressed
      data size in advance), hence the cost of the compressed tile in the
      queue is equal to the full tile size.  However, we would previously
      take its cost to be the compressed data size, which can be much
      lower, causing us to over-fill the queue.  Use the full tile size
      as the cost of queued compressed tiles to fix that.
      
      Furthermore, don't compress cloned queued tiles, whose cost is less
      than their data size, since this would increase their cost (these
      tiles will still be compressed upon writing.)
      a79978a4
  2. 18 May, 2019 1 commit
  3. 17 May, 2019 2 commits
  4. 16 May, 2019 1 commit
  5. 15 May, 2019 2 commits
  6. 14 May, 2019 5 commits
    • Øyvind "pippin" Kolås's avatar
    • Øyvind "pippin" Kolås's avatar
      bin: give names to states in renderer_task and recurse some states · b5825bcb
      Øyvind "pippin" Kolås authored
      By recursing through the states in the render path we execute all the non-core
      parts serially at a slightly higher efficiency than returning to the main loop.
      b5825bcb
    • Øyvind "pippin" Kolås's avatar
      bin: add keyframe command · 0b788d8c
      Øyvind "pippin" Kolås authored
      This is a command to be used when a specific property of an active
      node is selected for editing, for now only doing linear interpolation
      even though the GeglPath used underneath is a full bezier curve and
      more interpolator.
      
       keyframe list
         prints the set keyframes
       keyframe set [prop] [value] [time]
         sets the currently set property value as a keyframe at current time
         overriding possible existing value
       keyframe toggle
         sets the currently set propery value as keyframe value at current time
         if doing so would be a no-op unset the existing value instead.
       keyframe clear
         removes animation curve of current property
      
      The keybindings for "keyframe toggle" is control-k or just ` which is
      easily accesible on english layouts.
      0b788d8c
    • Øyvind "pippin" Kolås's avatar
      bin: add frame cache · af72f8b7
      Øyvind "pippin" Kolås authored
      When enabled GEGL is caching all rendered frames and associated pcm data for
      now uncompressed, you should have enough disk-space - and without deleting
      stale data, and for many uses the disk space used is excessive, it will be
      suited for realtime playback and editing of short segments, adding more file
      formats will make it usable will less scratch disk-space, as a solution with
      SSD it seems to make for a very good real-time full resolution preview backing
      cache.
      af72f8b7
    • Øyvind "pippin" Kolås's avatar
      1fe4b8d6
  7. 13 May, 2019 1 commit
  8. 11 May, 2019 1 commit
  9. 09 May, 2019 5 commits
  10. 08 May, 2019 1 commit
  11. 07 May, 2019 8 commits
    • Øyvind "pippin" Kolås's avatar
      post-release version bump · 1fc8a990
      Øyvind "pippin" Kolås authored
      1fc8a990
    • Øyvind "pippin" Kolås's avatar
      release 0.4.16 · 8fae1d8b
      Øyvind "pippin" Kolås authored
      8fae1d8b
    • Øyvind "pippin" Kolås's avatar
      NEWS: update · 0f326a2a
      Øyvind "pippin" Kolås authored
      0f326a2a
    • Ell's avatar
      buffer: use tile/scratch allocators in the swap backend · 96b06cf3
      Ell authored
      in GeglTileBackendSwap, use the tile- and scratch-allocators for
      temporary compression buffers, to improve performance.
      96b06cf3
    • Ell's avatar
      buffer: use tile allocator for tile data · f956830b
      Ell authored
      In GeglTile, use gegl-tile-alloc for tile data, instead of the
      normal allocator.
      
      Note that the tile allocator guarantees that allocated buffers are
      preceeded by sufficient room for the n_clones array, which
      simplifies the allocation of a shared n_clones+data buffer.
      f956830b
    • Ell's avatar
      buffer: add dedicated allocator for tile data · 137e66e4
      Ell authored
      Add gegl-tile-alloc -- a dedicated allocator for tile data.  The
      allocator amortizes the cost of memory allocation, which is
      especially high on Windows, over multiple tiles, by allocating
      tiles in bulk, in groups called blocks (currently, each block is
      roughly 1% of the tile-cache size.)
      
      The allocator is currently limited to tiles whose size is a power
      of 2, possibly multiplied by 3 or 5 (to support tiles whose
      dimensions are powers of 2, with up to 5 components).  The rest of
      the tiles are allocated using the normal allocator.
      
      Move the call to malloc_trim() from GeglBuffer's destructor to
      gegl-tile-alloc.  We call it whenever tile data equivalent to ~10%
      of the tile-cache size is freed.
      
      Add a tile-alloc-total stat, which reports the total amount of
      memory currently used by the tile allocator.
      137e66e4
    • Ell's avatar
      buffer: in gegl-scratch, don't rely on struct layout · e99622d8
      Ell authored
      In gegl-scratch, avoid relying on exact struct layout to guarantee
      data alignment, and rather use explicit pointer arithmetic instead.
      e99622d8
    • Ell's avatar
      buffer: rename GEGL_ALIGN => GEGL_ALIGNMENT; add GEGL_ALIGN() macro · 9efef7f6
      Ell authored
      Rename the GEGL_ALIGN constant (specifying allocated data
      alignment) to GEGL_ALIGNMENT, and add a GEGL_ALIGN() macro, which
      takes a size/address value and aligns it to GEGL_ALIGN.
      9efef7f6
  12. 06 May, 2019 5 commits
  13. 05 May, 2019 6 commits
    • Ell's avatar
      buffer: fix gegl_tile_handler_cache_copy() for GeglTileBackendBuffer backends · bffe6191
      Ell authored
      In gegl_tile_handler_cache_copy(), when the source cache doesn't
      have the requested tile, remove the tile from the destination cache
      *before* letting the backend copy the tile, since it might copy it
      into the destination cache as well, as happens with
      GeglTileBackendBuffer.  Previously, this would happen *after* the
      backend copied the tile, erroneously invalidating the copied tile
      in this case.  See issue #157.
      
      Also, don't invalidate the destination tile in this case, since
      gegl_buffer_copy() invalidates the entire affected region in bulk.
      bffe6191
    • Øyvind "pippin" Kolås's avatar
      NEWS: update · d93b9cdc
      Øyvind "pippin" Kolås authored
      d93b9cdc
    • Ell's avatar
      operation, transform: use indirect input buffer on main thread as well · 8a5dd582
      Ell authored
      In the various GeglOperation subclasses that use a per-thread
      indirect input-buffer, backed by the actual input buffer, during
      multithreaded processing, use an indirect buffer for the main
      thread as well, instead of using the input buffer directly
      (unless the main thread processes the entire output).
      
      This avoids a deadlock when multiple threads gegl_buffer_copy()
      from their input buffer to the output buffer concurrently: if a
      worker thread acquires both the (indirect) input-buffer and output-
      buffer locks, while the main thread acquires the (direct) input-
      buffer lock and waits on the output-buffer lock, as soon as the
      GeglTileBackendBuffer of the worker-thread's input buffer forwards
      a command to the underlying input buffer, it will deadlock while
      waiting for the input-buffer's lock (which is held by the main
      thread).  See issue #157.
      
      Furthermore, this should reduce contention over the underlying
      input buffer between the main thread and the worker threads.
      8a5dd582
    • Ell's avatar
      buffer: improve deadlock prevention in gegl_buffer_copy() · b3b9a943
      Ell authored
      In gegl_buffer_copy(), when using COW, sort the locks by the tile-
      storage pointers, instead of the buffer pointers, to avoid the
      possibility of a deadlock when different buffers use the same
      underlying storage in concurrent calls to the function.
      b3b9a943
    • Øyvind "pippin" Kolås's avatar
      NEWS: update · c2ae1b7e
      Øyvind "pippin" Kolås authored
      c2ae1b7e
    • Øyvind "pippin" Kolås's avatar
      b3564469
  14. 27 Apr, 2019 1 commit