 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 07.03.2013, 08:30 Titel: Screenlock vs PageFlip |
|
|
Vor einiger Zeit hatte ich das Gefühl einiges an Performance einzubüßen durch häufiges nutzen von Screenlock/Screenunlock gegenüber in von mir sehr alten Programmen genutzen PageFlip verfahren.
In diesem eher schlechten Versuch das miteinander zu vergleichen scheint Screenlock deutlich die bessere Methode zu sein...
Code: | Namespace dbuff
Dim scrActive as Integer
Dim scrVisible as Integer
End Namespace
#Define dbInit dbuff.scrActive = 1 : dbuff.scrVisible = 0 : ScreenSet dbuff.scrActive,dbuff.scrVisible :
#Define dbFlip swap dbuff.scrActive, dbuff.scrVisible : ScreenSet dbuff.scrActive,dbuff.scrVisible :
Randomize Timer
screenres 800,600,32,2
Dim dbTimer as Double
Dim dbTime as Double
Dim nmTimer as Double
Dim nmTime as Double
dbTimer = Timer
dbInit
for s as integer = 0 to 99
cls
For l as integer = 0 to 99
line(rnd*800,rnd*600)-(rnd*800,rnd*600),rnd*&hFFFFFF
Next l
dbFlip
next s
dbTime = Timer-dbTimer
ScreenSet 0,0
nmTimer = Timer
for s as integer = 0 to 99
screenlock
cls
For l as integer = 0 to 99
line(rnd*800,rnd*600)-(rnd*800,rnd*600),rnd*&hFFFFFF
Next l
screenunlock
next s
nmTime = Timer-nmTimer
?dbTime
?nmTime
sleep
|
Was genau passiert bei Screenlock/Screenunlock eigentlich und ist es wirklich die 'schnellere' Wahl... der Vorteil jedenfalls liegt auf der Hand..
Speichersparender da keine extra Seite benötigt wird...
Viel einfacher zu implementieren...
Aber wirklich 'schneller'? _________________
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.03.2013, 11:38 Titel: |
|
|
Hi,
vermutlich ist Screenlock/Screenunlock schneller, da hier das kopieren in das Video-RAM entfällt (gesperrt wird).
Beim PageFlip bleibt es beim kopieren aber von zwei verschiedenen Seiten.
Je nach Anwendung sind dies aber zwei verschiedene Methoden die auch zu unterschiedlichen Ergebnissen führen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.03.2013, 13:32 Titel: |
|
|
Was passiert bei SCREENLOCK bzw. SCREENUNLOCK.
Die Antwort findet man im Quelltext, kommt mal mit.
Schauen wir uns erstmal den FBGFX-Kontext an, zu finden in fb_gfx.h ab Zeile 238. driver ist der Pointer auf den benutzten Treiber; die Struktur wird direkt dadrunter definiert.
Treiber müssen die Funktionen lock/unlock implementieren, welche 1:1 auf screenlock und screenunlock abgebildet werden.
Der win32-Treiber implementiert das mit einer gemeinsamen critical section (gfx_win32.c:50, update_lock), die von fb_hWin32Lock respektive fb_hWin32Unlock betreten und verlassen wird.
Der Linux-Treiber für framebuffer macht das ganz ähnlich und nutzt pthread-Mutexe.
Der X11-Treiber nutzt auch pthread-Mutexe und sperrt gleichzeitig die Verbindung zum X-Server mit XLockDisplay (was nicht den Bildschirm sperrt o.ä., sondern tatsächlich nur den Zugriff für den eigenen Prozess).
Achja, Geschwindigkeit. Solange du alles aus einem Thread heraus machst, kostet das Sperren/entsperren wenig. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|