New commits:
http://git.directfb.org/?p=core/DirectFB.git;a=commit;h=c5d7e0c5d0b7651f80e88aaca390f9fec91d43a0
commit c5d7e0c5d0b7651f80e88aaca390f9fec91d43a0
Author: Denis Oliver Kropp <[email protected]>
Date: Sun Feb 10 11:36:28 2013 +0100
Task: Major step forward, cache, tiles, queues, optimisations, debug
tools...
API: Replace C wrappers SurfaceTask_Flush/etc... by Task_Flush/etc...
Add qid to Task. This is set during Setup of a Task being handled
by a multi core implementation that does not statically assign the
cores to the tiles, but allows any core to execute any pending Task.
This is not handled by the Task Manager, but the Task's Push()
implementation.
Add hwid to Task. This is set by or after Push() when it's decided
which core runs the Task.
Add next pointer to Task, used by Task implementations to queue up
tasks when passing the Push() implementation. Add Task::append()
to set the next pointer and assert that it is not set already.
Implement automatic set of cache flush/invalidate flags. A set of
accessors is stored that did not yet invalidate after last writer.
Flush is set by default for write access, but will be cleared when
another write task for same accessor is following. Giving the Task
implementation the chance to skip the flush at Done().
Add SurfaceTask::CacheInvalidate() and CacheFlush().
In the Task's Run() function concerning tasks running on the CPU,
CacheInvalidate() is called first.
Add Task::enableDump() to turn on log dump of the task during destruction.
This can be used for misbehaving tasks to see what happened when and
in which thread (including stack trace).
Add TASK_FLAG_NEED_SLAVE_PUSH. Task implementation indicates that
only the master Task needs the Push() call and takes care about the
slaves.
Add TASK_FLAG_LAST_IN_QUEUE. The task runner sets this flag when it
encounters the next pointer is NULL. This way the Finalise() later
in Task Manager thread (but implemented in TaskThreadsQ::Finalise)
can resume queue operation by pushing the updated next (if set).
Call Finalise() also on all slave Tasks.
Add TaskThreads and TaskThreadsQ. Convenience classes to run threads
that receive Tasks to call Run() on. The first one is a simple just
processing any pending Task in any thread. The second one takes care
that Tasks with the same qid are not run at the same time. This way
tasks from the same accessor can also use the follow flag when in tile
mode, by defining one qid per tile.
Add tiles_render to Engine Setup. This way an engine can choose to
receive the rendering calls only for the master task. It will have
to setup some tile_clip to handle in the Run() for each tile. This
is implemented by GenefxEngine now.
Make GenefxEngine require just one Task's rendering calls/buffer and
apply tile clip on the fly in each of the tile's task's Run().
In GenefxEngine::SetState() keep modified flags and emit only those
state entities that are required.
Add SimpleTask convenience class to register any Run function pointer
(optionally Push) wrapped into a Task.
Avoid fusion shm allocation by replacing the FusionVector of read tasks
in surface allocation by an std::list.
Four different debugging options (compile time) in src/core/Task.h.
Set fusion_config->skirmish_warn_on_thread to print a warning when
anyone calls fusion_skirmish_prevail() within ultra-high response
Task Manager thread.
More C wrappers for Tasks.
src/core/CoreLayerRegion_real.cpp | 12 +-
src/core/Fifo.h | 234 ++++++++++++
src/core/Makefile.am | 2 +
src/core/Renderer.cpp | 94 +++--
src/core/Renderer.h | 4 +-
src/core/Task.cpp | 754 +++++++++++++++++++++++++++----------
src/core/Task.h | 494 +++++++++++++-----------
src/core/TaskThreadsQ.cpp | 250 ++++++++++++
src/core/coretypes.h | 3 +
src/core/layers_internal.h | 2 +-
src/core/surface_allocation.cpp | 8 +-
src/core/surface_allocation.h | 12 +-
src/gfx/generic/GenefxEngine.cpp | 288 ++++++++++----
13 files changed, 1611 insertions(+), 546 deletions(-)
_______________________________________________
directfb-cvs mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-cvs