GNOME Bugzilla – Bug 357261
Caching
Last modified: 2007-11-24 18:54:23 UTC
Write an operations that maintains a sparse backing buffer the size of the HAVE rect of the operations. Keeps rendered information, and keeps cached computations as long as the properties have not changed. Where in the graph to apply caching should be possible to deduct from runtime instrumentation of which subgraphs do not change. Actually placed cache nodes could be moved to adapt to changes in processing behavior.
The projection used in the test app has been refactored to be a subclass of buffer. Most of the logic in the projection is actually a buffer cache. Another part of GEGL that needs changing is the evaluation and management of data during graph traversals. A new Class called GeglNodeDynamic which is associated with GeglNode and looked up with a evaluation context id is going to be used for this purpose.
The reentrancy needed to try implementing this (recursive cached evaluation) should now be possible.
Changed priority to high, since this should make GEGL more responsive as the sizes of used graphs grow.
All external uses of GeglCaches have been internalized now, and are accessed through gegl_node_blit, this is a step towards adding proper caching.
All nodes currently have caches, and gegl_operation_get_target uses the node's cache for writing it's output. The infrastructure seems to be mostly functional. At the moment all nods in the graph have caches, this will eventually fill the swap, at some point some management code needs to void regions or whole GeglBuffers to reduce the swap congestion.
Closing bug since it initial goals are filled (will open a new bug about the fact that the tile pool/swap will get saturated.)