Canvas.StretchDraw sehr langsam mit Gtk2-Qt/Linux.

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Canvas.StretchDraw sehr langsam mit Gtk2-Qt/Linux.

Beitrag von Soner »

Canvas.StretchDraw Funktion ist mit Gtk2-Widgetset sehr langsam. Es ist so langsam dass sogar Windowsversion des gleichen Programms unter Wine schneller Bilder anzeigt als native Linux-Version mit Gtk2-Widgetset. Ich habe auch Canvas.AntialiasingMode abgeschaltet (=amOff).
Testen könnte ihr das auch mit imgviewer-Beispielprogramm aus /lazarus/examples Ordner.
Ist es nur bei mir so langsam oder ist es bei euch auch langsam?

Getestet mit Lazarus 1.1, fpc 2.6.0, Xubuntu 13.04 alle 32Bit.
Ich habe mit Nvidia's originale Treiber und mit nouveau-Treiber getestest es gibt kein Unterschied.
Zuletzt geändert von Soner am Fr 21. Jun 2013, 15:35, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von theo »

Was verstehst du unter "langsam" ?

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

Spürbar langsam sodass flüssiges Verschieben mit dem Maus richtig unangenehm bis unmöglich wird. Und das alles mit normale Bildgröße von ca. 800x600, 1024x768 und zoom von 150% bis 300%. Bei Zoom von 400%-600% kann mann Kaffee holen gehen, während Windowsversion normal bedienbar ist auch unter Wine.
Ich habe jetzt mit LazRGBGraphics-Kompenente getestet und es ist schneller als normale Canvas.
Mann kann auch den Vergleich mit von Distro mitgelieferte Bilderbetrachter (z.B. ristretto oder viewnoir) machen, die sind schneller.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

Ich habe jetzt die Zeit gemessen so sind die Ergebnisse:

Code: Alles auswählen

 
Jpg 1024x768 Mit TGraphic+Canvas.StretchDraw-Methode
Zeit wurde mit GetTickCount gemessen
 
      Windows      Linux
Zoom    Zeit-TC     Zeit-TC
100      16         0   
110      -         206
150      16         250-260
200      16         190-345
600      16         896-1100
 
Bei Windows ist die Zeit ist von Zoom unabhängig, anscheinend wird nur sichtbare Bereich gezeichnet.
Bei Windows ist LazRGBGraphics ist genauso schnell wie TGraphic+Canvas.StretchDraw
LazRGBGraphics ist bei Linux auch sehr schnell 600% 40ms
 

Schon bei 110% dauert es lange. Dazu kommt noch dass Prozessor-Auslastung anfängt hoch zusteigen, dann dauert es noch lange bis das Bild aktualisiert wird.
Verschieben des Bildausschnitts mit Maus ohne ScrollBar (Maus gedrückt halten und verschieben) ist mühsam weil aktualisierung sehr langsam ist wie man sieht.
Wenn jemand sich interessiert kann ich Testprogramm geben.
Anscheinend ist es nur bei mir so, sehr merkwürkid...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Christian »

häng das doch gleich mit an nicht nachvollziehbare Testergebnisse isnd immer fragwürdig
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

Läuft denn ImgViewer-Beispiel aus dem /lazarus/examples Ordner bei dir normal? Dort wird auch nach dem Zoomen sehr langsam gezeichnet.
Ich füge mein Programm als Anlage hier.
Es läßt ohne weiteres Kompilieren man braucht nichts, es sei denn du willst auch nachschauen wie schnell LazRGBGraphics-Zeichnet, dann mus man LazRBGgraphics-Komponente haben:
- http://wiki.freepascal.org/LazRGBGraphics herunterladen.
- Paket In Lazarus laden kompilieren, man braucht Lazarus nicht neu zukompilieren.
- LazRGbGraphics zu Projekts benötigte Packages hinzufügen und Compilerschalter USELAZRGB in imageviewermain.pas aktivieren.

Es steht alles in imageviewermain.pas am Anfang.
Bildscrollen mit linke Maustaste gdrückt halten und Mausbewegen.

Datei lade ich nochmal noch.
Zuletzt geändert von Soner am Do 20. Jun 2013, 22:10, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von theo »

Ja, das ist hier ähnlich langsam.
Vllt. kannst du zuerst auf einen Puffer Stretchdrawen und diesen beim Verschieben nur noch 1:1 zeichnen.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

theo hat geschrieben:Ja, das ist hier ähnlich langsam.
Vllt. kannst du zuerst auf einen Puffer Stretchdrawen und diesen beim Verschieben nur noch 1:1 zeichnen.

Danke für den Test. Du hast Recht in meinem alten Delphi-Programm habe ich das so gemacht, weil es noch Antialiasing kommt. Und auch nur sichtbare Teil soll auf"s Bildschirm gezeichnet werden.
Aber es geht hier um Canvas.StretchDraw-Funktion, das darf doch nicht so langsam sein. Wenn es bei euch auch so langsam ist dann muss irgendetwas dort falsch laufen. LazRGBGraphics-Paket verwendet ja auch gleiche Widgetset-Funktion, sobald ich auf die schnelle erkennen konnte.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

Hier lade ich Testprogramm noch mal noch.
Ich habe in Testprogramm Verschiebefehler korregiert und Variablenanpassungen bei Fenstergrößenänderung gemacht.
Dateianhänge
ImgViewerTest-2.7z
Canvas.StretchDraw-Test
(61.57 KiB) 90-mal heruntergeladen

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Scotty »

Ohne in den Code gesehen zu haben: Ich habe beobachtet, dass Gtk2 im Gegensatz zu Windows im OnDragOver jedes Mouseevent bearbeitet. D.h. auf dem Weg von 10,10 zu 20,20 durchläuft Linux die Routine 10x und Windows nur 1x (wenn ich schnell genug bin).

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Canvas.StretchDraw sehr langsam mit Gtk2/Linux.

Beitrag von Soner »

Scotty hat geschrieben:Ohne in den Code gesehen zu haben: Ich habe beobachtet, dass Gtk2 im Gegensatz zu Windows im OnDragOver jedes Mouseevent bearbeitet. D.h. auf dem Weg von 10,10 zu 20,20 durchläuft Linux die Routine 10x und Windows nur 1x (wenn ich schnell genug bin).

Hat damit nicht zu tun. Die Bildzeichnenroutinen von TCanvas sind irgendwie unter Linux langsam.
Ich habe heute das Testprogramm mit Qt-Widgetset erstellt, es wird genauso langsam gezeichnet.

Antworten