New commits:
http://git.directfb.org/?p=core/DirectFB.git;a=commit;h=25132e718c00bb4b65d0f4f59520692d203b83b2
commit 25132e718c00bb4b65d0f4f59520692d203b83b2
Author: Denis Oliver Kropp <[email protected]>
Date: Sun Apr 14 20:29:51 2013 +0200
Task: Implement real throttling of the source when too many graphics
operations are pending, gets rid of ugly usleep in Renderer::updateLock() :)
Add Throttle interface that can be passed to Renderer constructor to get
callbacks about throttling,
with one implementation using fusion_call_set_quota() and the other simply
blocking on wait queue,
the former is used for indirect rendering via CoreGraphicsState object with
FusionCall, the latter
is used when the master renders from its main thread, or none throttling is
used when running within
the Fusion Dispatch thread.
Add SurfaceTask::AddHook() to register a callback interface for setup() and
finalise() calls within the Task Manager thread,
used by the Throttle to count the running tasks and adjust the value...
Also remove other blocking call in GenefxEngine. Task based rendering is
completely free of blocking calls except for
the source being throttled when needed (avoiding sleeps in dispatch threads
etc...)
Debug, cleanups...
== Throttle in action:
Benchmarking 256x256 on 640x464 ARGB (32bit)...
(-) [Main Thread 113680.005,970] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::Throttle( 0x1595d50 )
(-) [Main Thread 113680.151,528] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.151,583] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.151,595] ( 1200) DirectFB/Renderer/Throttle:
-> count 1
(-) [Task Manager 113680.151,749] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.151,755] ( 1200) DirectFB/Renderer/Throttle:
-> count 0
(-) [Main Thread 113680.152,784] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.152,801] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.152,805] ( 1200) DirectFB/Renderer/Throttle:
-> count 1
(-) [Task Manager 113680.152,881] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x154caf0, task 0x1596f90 )
(-) [Task Manager 113680.152,885] ( 1200) DirectFB/Renderer/Throttle:
-> count 0
(-) [Main Thread 113680.153,475] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.153,489] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.153,493] ( 1200) DirectFB/Renderer/Throttle:
-> count 1
(-) [Main Thread 113680.154,166] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159bb30 )
(-) [Task Manager 113680.154,181] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x159bb30 )
(-) [Task Manager 113680.154,185] ( 1200) DirectFB/Renderer/Throttle:
-> count 2
(-) [Main Thread 113680.154,926] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159fc10 )
(-) [Task Manager 113680.154,941] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x159fc10 )
(-) [Task Manager 113680.154,945] ( 1200) DirectFB/Renderer/Throttle:
-> count 3
(-) [Task Manager 113680.155,553] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.155,557] ( 1200) DirectFB/Renderer/Throttle:
-> count 2
(-) [Main Thread 113680.155,795] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x15a0150 )
(-) [Task Manager 113680.155,811] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x15a0150 )
(-) [Task Manager 113680.155,815] ( 1200) DirectFB/Renderer/Throttle:
-> count 3
(-) [Main Thread 113680.157,024] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.157,042] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.157,047] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Main Thread 113680.157,856] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x15a06b0 )
(-) [Task Manager 113680.158,057] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x159bb30 )
(-) [Task Manager 113680.158,064] ( 1200) DirectFB/Renderer/Throttle:
-> count 3
(-) [Task Manager 113680.158,071] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x15a06b0 )
(-) [Task Manager 113680.158,073] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Main Thread 113680.158,629] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x15a0c10 )
(-) [Task Manager 113680.158,643] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x15a0c10 )
(-) [Task Manager 113680.158,648] ( 1200) DirectFB/Renderer/Throttle:
-> count 5
(-) [Task Manager 113680.158,650] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 100% (blocked) from now
(-) [Main Thread 113680.159,311] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x1596f90 )
(-) [Task Manager 113680.160,589] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x159fc10 )
(-) [Task Manager 113680.160,600] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 0% (full speed) from now
(-) [Task Manager 113680.160,606] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Task Manager 113680.160,614] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x1596f90 )
(-) [Task Manager 113680.160,618] ( 1200) DirectFB/Renderer/Throttle:
-> count 5
(-) [Task Manager 113680.160,620] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 100% (blocked) from now
(-) [Main Thread 113680.161,286] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x15a1170 )
(-) [Task Manager 113680.162,706] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x15a0150 )
(-) [Task Manager 113680.162,718] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 0% (full speed) from now
(-) [Task Manager 113680.162,724] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Task Manager 113680.162,775] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x15a1170 )
(-) [Task Manager 113680.162,789] ( 1200) DirectFB/Renderer/Throttle:
-> count 5
(-) [Task Manager 113680.162,798] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 100% (blocked) from now
(-) [Main Thread 113680.163,508] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159fc10 )
(-) [Task Manager 113680.164,598] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x159f6d0 )
(-) [Task Manager 113680.164,607] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 0% (full speed) from now
(-) [Task Manager 113680.164,614] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Task Manager 113680.164,633] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x159fc10 )
(-) [Task Manager 113680.164,642] ( 1200) DirectFB/Renderer/Throttle:
-> count 5
(-) [Task Manager 113680.164,661] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 100% (blocked) from now
(-) [Main Thread 113680.165,305] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x15a0410 )
(-) [Task Manager 113680.166,679] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x15a06b0 )
(-) [Task Manager 113680.166,693] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 0% (full speed) from now
(-) [Task Manager 113680.166,701] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
(-) [Task Manager 113680.166,725] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::setup( 0x1595d50, task 0x15a0410 )
(-) [Task Manager 113680.166,734] ( 1200) DirectFB/Renderer/Throttle:
-> count 5
(-) [Task Manager 113680.166,753] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 100% (blocked) from now
(-) [Main Thread 113680.167,468] ( 1196) DirectFB/Renderer/Throttle:
Renderer::Throttle::AddTask( 0x1595d50, task 0x159f8e0 )
(-) [Task Manager 113680.168,667] ( 1200) DirectFB/Renderer/Throttle:
Renderer::Throttle::finalise( 0x1595d50, task 0x15a0c10 )
(-) [Task Manager 113680.168,683] ( 1200) DirectFB/Renderer/Throttle:
-> throttling at 0% (full speed) from now
(-) [Task Manager 113680.168,694] ( 1200) DirectFB/Renderer/Throttle:
-> count 4
== df_dok without tests running much longer due to too many buffers:
cyto [~/DFB/DirectFB/src] df_dok --dfb:task-manager,software-cores=4
--fullscreen
(*) Direct/Thread: Started 'SigHandler' (1451) [CRITICAL - OTHER/0]
<8392704>...
~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.7.0 |~~~~~~~~~~~~~~~~~~~~~~~~~~
(c) 2012-2013 DirectFB integrated media GmbH
(c) 2001-2013 The world wide DirectFB Open Source Community
(c) 2000-2004 Convergence (integrated media) GmbH
----------------------------------------------------------------
(*) DirectFB/Core: Multi Application Core. (2013-04-14 18:13)
(*) Direct/Memcpy: Forced to use libc memcpy()
(*) Fusion/SHM: Using MADV_REMOVE (3.5.0.0 >= 2.6.19.2)
(*) Fusion/SHM: Shared root (0) is 2232 bytes [0x1000 @ 0x523000000000]
(*) Direct/Thread: Started 'Fusion Dispatch' (1452) [MESSAGING - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Fusion Deferred' (1453) [MESSAGING - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Task Manager' (1454) [CRITICAL - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Genefx/0' (1455) [DEFAULT - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Genefx/1' (1456) [DEFAULT - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Genefx/2' (1457) [DEFAULT - OTHER/0]
<8392704>...
(*) Direct/Thread: Started 'Genefx/3' (1458) [DEFAULT - OTHER/0]
<8392704>...
(!!!) *** WARNING [/dev/shm/dfb.0 exists, cleaning up] ***
[shared_secure_surface_pool.c:126 in sharedSecureInitPool()]
(*) DirectFB/Input: Hot-plug detection enabled with Input Hub Driver
(*) Direct/Thread: Started 'Virtual Input' (1459) [INPUT - OTHER/0]
<8392704>...
(*) DirectFB/Input: Virtual Input 1.7 (Convergence GmbH)
(*) Direct/Thread: Started 'X11 Input' (1460) [INPUT - OTHER/0] <8392704>...
(*) DirectFB/Input: X11 Input 0.1 (directfb.org)
(*) DirectFB/Genefx: MMX detected and enabled
(*) DirectFB/Graphics: MMX Software Rasterizer 0.7 (directfb.org)
(*) DirectFB/Core/WM: SaWMan 0.2 (directfb.org)
(*) SaWMan/Config: Parsing config file '/opt/dfb/etc/sawmanrc'.
(*) SaWMan/Config: Parsing config file '/home/dok/.sawmanrc'.
(*) SaWMan: Initializing stack 0x5230010ad400 for tier 0x5230024d4000, 0x0,
layer 0, context 0x5230000a0000 [655416]...
(*) SaWMan/Init: Layer 0: 640x480, ARGB, options: 0
(*) SaWMan/Init: Border 0: 640x480, ARGB, options: 8
(*) Direct/Thread: Started 'Task/0' (1461) [DEFAULT - OTHER/0] <8392704>...
(*) Direct/Thread: Started 'Task/1' (1462) [DEFAULT - OTHER/0] <8392704>...
(*) Direct/Thread: Started 'Task/2' (1463) [DEFAULT - OTHER/0] <8392704>...
(*) Direct/Thread: Started 'Task/3' (1464) [DEFAULT - OTHER/0] <8392704>...
(*) X11/Display: Not using XShm.
(*) Direct/Interface: Loaded 'PNG' implementation of
'IDirectFBImageProvider'.
(*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
(*) X11/Display: Not using XShm.
(*) Direct/Interface: Using 'GIF' implementation of
'IDirectFBImageProvider'.
Benchmarking 256x256 on 640x480 ARGB (32bit)...
Anti-aliased Text 3.006 secs ( 7211.976
KChars/sec) [360.0%]
Anti-aliased Text (blend) 3.034 secs ( 1877.125
KChars/sec) [386.4%]
Fill Rectangle 3.053 secs ( 17587.174
MPixel/sec) [304.5%]
Fill Rectangle (blend) 3.068 secs ( 461.400
MPixel/sec) [269.9%]
Fill Rectangles [10] 3.045 secs ( 18143.464
MPixel/sec) [278.9%]
Fill Rectangles [10] (blend) 3.120 secs ( 462.112
MPixel/sec) [268.9%]
Fill Triangles 3.009 secs ( 4205.716
MPixel/sec) [354.3%]
Fill Triangles (blend) 3.077 secs ( 385.505
MPixel/sec) [252.1%]
Draw Rectangle 3.019 secs ( 456.409
KRects/sec) [328.9%]
Draw Rectangle (blend) 3.221 secs ( 105.526
KRects/sec) [305.2%]
Draw Lines [10] 3.149 secs ( 5607.176
KLines/sec) [342.6%]
Draw Lines [10] (blend) 3.229 secs ( 1738.618
KLines/sec) [265.5%]
Fill Spans 3.002 secs ( 8520.553
MPixel/sec) [373.6%]
Fill Spans (blend) 3.058 secs ( 450.051
MPixel/sec) [274.0%]
Fill Trapezoids [10] 3.016 secs ( 7605.305
MPixel/sec) [328.9%]
Blit 3.074 secs ( 10201.358
MPixel/sec) [282.4%]
Blit 180 3.093 secs ( 4027.931
MPixel/sec) [277.0%]
Blit colorkeyed 3.103 secs ( 4112.104
MPixel/sec) [274.1%]
Blit destination colorkeyed 3.076 secs ( 5128.255
MPixel/sec) [282.7%]
Blit with format conversion 3.106 secs ( 508.505
MPixel/sec) [270.6%]
Blit with colorizing 3.029 secs ( 424.069
MPixel/sec) [271.5%]
Blit from 32bit (blend) 3.047 secs ( 281.759
MPixel/sec) [273.0%]
Blit from 32bit (blend) with colorizing 3.051 secs ( 244.873
MPixel/sec) [274.4%]
Blit SrcOver (premultiplied source) 3.005 secs ( 1387.051
MPixel/sec) [268.3%]
Blit SrcOver (premultiply source) 3.008 secs ( 1383.489
MPixel/sec) [269.3%]
Stretch Blit 3.693 secs ( 569.891
MPixel/sec) [288.3%]
Stretch Blit colorkeyed 3.395 secs ( 542.997
MPixel/sec) [288.7%]
Signed-off-by: Denis Oliver Kropp <[email protected]>
src/core/CoreGraphicsStateClient.cpp | 47 +++++++++++-
src/core/CoreGraphicsState_real.cpp | 41 ++++++++---
src/core/CoreLayerRegion_real.cpp | 11 ++-
src/core/Renderer.cpp | 135 ++++++++++++++++++++++------------
src/core/Renderer.h | 28 ++++++-
src/core/Task.cpp | 41 ++++++++++-
src/core/Task.h | 9 +++
src/gfx/generic/GenefxEngine.cpp | 2 -
8 files changed, 242 insertions(+), 72 deletions(-)
_______________________________________________
directfb-cvs mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-cvs