[ANNOUNCE] text2skin Optimierung

  • Ich poste das mal hier, da das wohl für einige hier interessant sein könnte.
    Die Darstellung der Skins mit dem text2skin Plugin ist ja äußerst langsam. Das Enigma Skin braucht bei mir (via C3 1Ghz mit xine-output) 800-1000ms für den Bildaufbau, z.B. wenn man im Hauptmenü navigiert. Das ist für eine flüssige Benutzung einfach zu langsam.


    Ich habe mir das Problem mal näher angeschaut und mehrere Ursachen gefunden. Eine modifizierte Version des Plugins kann von ftp://merkur.2y.net/pub/vdr runtergeladen werden. Diese Version basiert auf "text2skin-1.1-cvs_ext-0.10". Folgende Probleme sollten damit behoben werden:


    1. Bei jedem Neuzeichnen wird in text2skin für jedes Menüelement Speicher angefordert und freigegeben. Das kostet sehr viel Zeit. In der gepatchten Version ist das nun nicht mehr so. Die Änderung ist mit allen Skins kompatibel und bringt schon alleine eine erhebliche Geschwindigkeits-Steigerung. Mit dem Enigma-Skin dauert ein Bildschirm-Auffrischen nun etwa 100-200ms, also schonmal eine Steigerung um einen Faktor 5-10!


    2. Bei jeder Veränderung des Menüs wird alles neu gezeichnet.
    Um das zu vermeiden habe ich eine Möglichkeit eingebaut, um nur geänderte Elemente zu zeichnen. Dazu ist aber eine Anpassung der Skins notwendig.
    Die Menüelemente bekommen zwei neue Optionen:
    refresh="" und changed=""


    Mögliche Werte sind für refresh:
    allways,all,update,timeout,list,scroll,full,force


    allways : es wird in jedem Fall gezeichnet
    all: nur bei einem kompletten Neuaufbau des Bildschirminhalts
    update: es wird geprüft, ob sich das Token, das mit changed="<token>" angegeben wurde geändert hat.
    timeout: für Laufschriften...
    list,scroll: bewegen in einer Liste oder einem Scrolltext
    full: alle Elemente in einer block-Umgebung aktualisieren
    force: bei "update" wird nicht "changed" überprüft.


    Damit komme ich dann auf ca. 20-50ms Bildaufbau, wenn man z.B. im Menü zwischen den einzelnen Punkten wechselt.


    Als Beispiel steht ein angepasstes enigma-skin-template auch zum Download. Ich hoffe, die Erklärungen reichen fürs erste. Einige Beispiele sind in der Skin Datei zu sehen.


    Eine weiter Änderung in dieser Version ist auch noch eine Koordinaten-Eingabe relativ zur nächst höheren block- oder list-Umgebung. Dazu die Skin-Version auf "1.1" setzen. ein "block" kann dann ganz normal mit Position und Größe versehen werden und alle enthaltenen Elemente positionieren sich dann relativ dazu.


    Es würde mich natürlich sehr interessieren, ob ihr diese Änderungen für sinnvoll haltet.
    Christian

  • Hi!


    Das klingt ja hochinteressant. Hatte auch schon mal überlegt wo die Zeit veroren geht, hätte aber nicht gedacht dass das Anfordern von Speicher usw. so viel bremsen könnte.


    Werde das mal testen und bin schon gespannt. :]


    EDIT: Das Speicherleck hast du nicht zufällig gefunden? Irgendwie wird immer mehr Speicher vom Plugin belegt ... mit jedem Öffnen des Menüs kommt etwas hinzu.


    Gruß,
    Brougs78

    - -- --- ================================================================ --- -- -
    Antec Fusion, Intel E5200, Asus P5N7A-VM (VDPAU), DD CineS2 v6 + DD DuoFlex CI // yavdr-0.6.1
    - -- --- ================================================================ --- -- -

    Einmal editiert, zuletzt von Brougs78 ()

  • Was soll ich sagen. Die verbesserte text2skin Version von chr13 flutscht wie nix :monster2


    Auf der 600Mhz Gurke hier ist es deutlich schneller geworden. Die CPU-Belastung beim scrollen durch mein Aufnahmeverzeichnis ist von ~70% auf ~40% gesunken. Das verbesserte Template habe ich noch garnicht eingebaut. Bin begeistert!


    Hier mal ein paar Patches bezüglich gcc-4.1 und vdr 1.5.x:


    GCC 4.1:



    VDR 1.5.x:



    Vielen Dank an chr13 für deine Unterstützung!


    Grüße
    Michi

    Wohnzimmer: Techsolo TC-400 :: ASUS P5N7A-VM :: Intel Core 2 Duo E7400 :: GeForce 9300 onboard :: vdr 1.7.15 e-tobi ::
    In Rente: Pimped Scenic 600 (Bilder und Aufbau) :: PIII 600Mhz :: Hauppauge Nexus-S 2.1 4MB :: vdr 1.5.2 e-tobi ::


    "Wer denkt, dass Volksvertreter das Volk vertreten, der glaubt auch, dass Zitronenfalter Zitronen falten." Zeit zum ändern!

  • Hallo!


    Alle, die mit unveränderten Skins testen wollen, können versuchen, in "screen.h" wieder "DIRECTBLIT" auszuschalten.


    Wenn immer der ganze Bildschirm überschrieben wird, würde bei DIRECTBLIT auch alles immer an die Hardware/X11 gesendet. Ohne DIRECTBLIT wird es vorher nochmal mit einem Puffer verglichen und nur der geänderte Teil übertragen.


    Das Vergleichen bringt aber wirklich nur was, wenn das OSD sehr langsam an die Hardware gesendet wird (ist das bei FF Karten so??). Mit dem selekiven Zeichnen, ist das so aber überhaupt nicht mehr nötig.


    Die meiste Zeit geht noch beim Zeichnen selber drauf. Z. B. wenn eine große Farbfläche gefüllt wird. Das liegt aber an der sehr ineffizienten Implementierung im vdr. Da wird immer punktweise verglichen und gezeichnet. Leider erlaubt die Osd-Klasse keinen direkten Zugriff auf den Bildspeicher. Das Problem sollten aber auch C++ Skins haben.


    Die beste Strategie ist also erstmal, unnötiges Zeichnen zu vermeiden.


    Brougs78
    Die Zeit hängt möglicherweise auch mit der Größe des schon angeforderten Speichers zusammen - es wurde ja hier schon berichtet, daß text2skin langsamer wird, wenn viele Skins geladen sind...
    Da die neuen Speicherbereiche sehr wahrscheinlich nicht im Cache liegen ist das auch verständlich.


    Ein Speicherleck habe ich nicht gefunden. Da jetzt aber viele new/delete Operationen weggefallen sind, könnte es auch durchaus weg sein :)


    Viele Grüße,
    Christian

  • Hi,


    Zitat

    Es würde mich natürlich sehr interessieren, ob ihr diese Änderungen für sinnvoll haltet.


    Wenn schneller dann sinnvoll :hat2


    Zitat

    Auf der 600Mhz Gurke hier ist es deutlich schneller geworden. Die CPU-Belastung beim scrollen durch mein Aufnahmeverzeichnis ist von ~70% auf ~40% gesunken. Das verbesserte Template habe ich noch garnicht eingebaut. Bin begeistert!


    Und das Template bringt nochmal ordendlich speed!
    Allerdings passt dann bei mir auch irgendwas mit dem Scrollen der Texte nicht.


    Zitat

    Hier mal ein paar Patches bezüglich gcc-4.1 und vdr 1.5.x:


    Da text2skin und 1.4.6-1 auch mit dem Patch für 1.5.2 läuft, schlage ich vor gleich beide Patche einzubauen.


    Gruß, Marc

  • So. Mein persönliches Template habe ich jetzt auch angepasst. Reduziert die CPU-Belastung nochmals.. Habe jetzt beim scrollen durch die Aufnahmen ~10% CPU-Belastung. Das sind 60% weniger als vorher ;) Dementsprechend schnell ist das OSD geworden.


    Zitat

    Original von zulu
    Und das Template bringt nochmal ordendlich speed!
    Allerdings passt dann bei mir auch irgendwas mit dem Scrollen der Texte nicht.


    Das ist mir auch aufgefallen. Primär funktioniert das scrollen nicht mehr in der Programmübersicht (ersetzt durch EPG-Search) und dem Aufnahmenmenü (ersetzt durch extrecmenu). Wenn man mit dem Cursor hoch und wieder runter geht wird der Scrollstatus jedoch aktualisiert, nur halt nicht in Echtzeit. D.h. der Text bleibt einfach stehen.


    Zitat

    Original von zulu
    Da text2skin und 1.4.6-1 auch mit dem Patch für 1.5.2 läuft, schlage ich vor gleich beide Patche einzubauen.


    Wenn Christian nix dagegen hat, könnte er es fest einbauen.


    Btw. Christian: Würde es dir was ausmachen, wenn ich deine Verbesserungen an text2skin in einen neuen, seperaten Thread verschiebe? Ich denke das Thema dürfte einige Leute interessieren, hier in dem langen Thread geht es leider etwas unter.


    Viele Grüße
    Michi

    Wohnzimmer: Techsolo TC-400 :: ASUS P5N7A-VM :: Intel Core 2 Duo E7400 :: GeForce 9300 onboard :: vdr 1.7.15 e-tobi ::
    In Rente: Pimped Scenic 600 (Bilder und Aufbau) :: PIII 600Mhz :: Hauppauge Nexus-S 2.1 4MB :: vdr 1.5.2 e-tobi ::


    "Wer denkt, dass Volksvertreter das Volk vertreten, der glaubt auch, dass Zitronenfalter Zitronen falten." Zeit zum ändern!

  • Ok, das mit der Laufschrift habe ich wohl übersehen. Es fehlte nur die entsprechende refresh-Bedingung (timeout) an ein paar Stellen. Ich habe gerade ein neues skin-template hochgeladen. Es sollte jetzt gehen.


    Ich werde die beiden patches gleich mal ansehen. Wenn es auch mit altem vdr und gcc funktioniert, spricht ja nichts dagegen, es einzubauen.


    skiller2k1
    Da das Thema ja anscheindend viele interessiert, ist wohl ein eigener Thread eine gute Idee.


    Grüße,
    Christian

  • Hallo Christian!


    Zitat

    Original von chr13
    Ok, das mit der Laufschrift habe ich wohl übersehen. Es fehlte nur die entsprechende refresh-Bedingung (timeout) an ein paar Stellen. Ich habe gerade ein neues skin-template hochgeladen. Es sollte jetzt gehen.


    Danke für das schnelle Update. Mir ist noch aufgefallen:


    Im Hauptmenü wird ja bei bekannten Menüpunkten ein Symbol angezeigt. (Bei Aufzeichnungen ist es z.b. das Kassettensymbol) Bei unbekannten einfach ein Standardsymbol.


    Kommt man nun auf einen solchen Punkt wo kein Symbol verfügbar ist, bleibt das alte Bild einfach stehen. Beispiel: Ich gehe vom Menüpunkt Aufzeichnungen zum Menüpunkt Plugins (hab ich selber angelegt, ist ein Submenu). Dann bekommt der Punkt das gleiche Symbol wie Aufzeichnungen. Mit anderen Einträgen ist es das gleiche.


    Schätze da wird auch nicht passend aktualisiert. Ganz anders sieht es aus wenn ich Timer aktiv habe und in der Timerliste rechts diese angezeigt werden. Wenn man dann durch die Menüpunkte geht flackert das Symbol irgendwie (passiert wohl auch nur, wenn ein Timer einen längeren Namen hat und gescrollt werden muss).


    Zitat

    Original von chr13
    Ich werde die beiden patches gleich mal ansehen. Wenn es auch mit altem vdr und gcc funktioniert, spricht ja nichts dagegen, es einzubauen.


    Das wäre nett, danke!


    Zitat

    Original von chr13
    skiller2k1
    Da das Thema ja anscheindend viele interessiert, ist wohl ein eigener Thread eine gute Idee.


    Werde ich gleich erledigen, danke.


    Grüße
    Michi

    Wohnzimmer: Techsolo TC-400 :: ASUS P5N7A-VM :: Intel Core 2 Duo E7400 :: GeForce 9300 onboard :: vdr 1.7.15 e-tobi ::
    In Rente: Pimped Scenic 600 (Bilder und Aufbau) :: PIII 600Mhz :: Hauppauge Nexus-S 2.1 4MB :: vdr 1.5.2 e-tobi ::


    "Wer denkt, dass Volksvertreter das Volk vertreten, der glaubt auch, dass Zitronenfalter Zitronen falten." Zeit zum ändern!

  • @Christian: Habs hier mal in die News verschoben. Falls dir der Titel nicht passt, einfach ändern, mir ist jetzt auf die schnelle nichts besseres eingefallen :monster2


    Grüße
    Michi

    Wohnzimmer: Techsolo TC-400 :: ASUS P5N7A-VM :: Intel Core 2 Duo E7400 :: GeForce 9300 onboard :: vdr 1.7.15 e-tobi ::
    In Rente: Pimped Scenic 600 (Bilder und Aufbau) :: PIII 600Mhz :: Hauppauge Nexus-S 2.1 4MB :: vdr 1.5.2 e-tobi ::


    "Wer denkt, dass Volksvertreter das Volk vertreten, der glaubt auch, dass Zitronenfalter Zitronen falten." Zeit zum ändern!

  • Jo, das fluppt jetzt richtig gut.


    Zitat

    Original von chr13
    1. Bei jedem Neuzeichnen wird in text2skin für jedes Menüelement Speicher angefordert und freigegeben. Das kostet sehr viel Zeit. In der gepatchten Version ist das nun nicht mehr so. Die Änderung ist mit allen Skins kompatibel und bringt schon alleine eine erhebliche Geschwindigkeits-Steigerung. Mit dem Enigma-Skin dauert ein Bildschirm-Auffrischen nun etwa 100-200ms, also schonmal eine Steigerung um einen Faktor 5-10!


    Genial, damit hätte ich beileibe nicht gerechnet. Ich habe zwar schon einschlägige Erfahrungen mit langsamen Speicherverwaltungen, habe die von Linux jedoch immer subjektiv für eine der schnelleren gehalten.


    Zitat

    2. Bei jeder Veränderung des Menüs wird alles neu gezeichnet.
    Um das zu vermeiden habe ich eine Möglichkeit eingebaut, um nur geänderte Elemente zu zeichnen. Dazu ist aber eine Anpassung der Skins notwendig.


    Das wäre sicherlich ein Ansatz gewesen, den ich auch verfolgt hätte, wenn ich die Zeit mich weiterhin intensiv mit allen meinen Plugins zu beschäftigen gehabt hätte. Leider ist die Liste lang und die Zeit knapp :(


    Zitat

    Es würde mich natürlich sehr interessieren, ob ihr diese Änderungen für sinnvoll haltet.


    Machst Du Witze? JA! ;)


    Würde es für Dich in Frage kommen als Maintainer mit CVS-Schreibzugriff weiterhin an dem Projekt zu arbeiten? Wenn ja PN mich mal an.

  • Wahnsinn - Gestern ein CPU-Upgrade und jetzt noch so ein Software-Performance-Tweak. Mein VDR "fuehlt" sich wesentlich schneller an als vorher.


    Danke an chr13 und skiller2k1.


    Finde das waere einen Wiki-Eintrag wert

    Streaming-Server: Hardware: Via C7 1.5GHz, 1GBRam, FF 1.3, 750GB verschluesselt
    Software: Debian Testing, VDR 1.6.0 - 24h/7 Betrieb


    Samsung SMT-7020S als Streaming-Client

  • Super!!


    Danke für die Anpassungen. geht wesentlich fixer jetzt...


    Ist das Template wirklich als solches zu verstehen, oder sollte das funktionieren? Ich frage, weil der Enigma Skin nicht mehr anwählbar ist, wenn ich das nach /usr/share/vdr-skins/enigma kopiere. Folgenden Fehler bekomme ich im syslog:

    Code
    May  8 21:00:34 troubadix vdr: [7264] parsing /var/lib/vdr/plugins/text2skin/Enigma/Enigma.skin
    May  8 21:00:34 troubadix vdr: [7264] ERROR: Text2Skin: Invalid numeric value "%MARQUEE_DELAY%" in attribute delay
    May  8 21:00:34 troubadix vdr: [7264] ERROR: Text2Skin: Parse error in /var/lib/vdr/plugins/text2skin/Enigma/Enigma.skin, line 168
    May  8 21:00:34 troubadix vdr: [7264] ERROR: error in skin file

    easyVDR 0.6: VDR: Asus M2N-VM DVI, 2GB RAM, AMD A64 X2 4000+ EE, Samsung SpinPoint T166 400GB SATA II, LG Electronics GSA-H62N schwarz DVD Brenner, TT1.5 FF, TT Budget verpackt in einem Silverstone LC17 Gehäuse.
    Client: MediaMVP


    yavdr 0.3a:Asus M4A78LT-M LE, 4GB RAM, AMD Athlon II X2 240e, Asus Geforce ENGT520, 320GB Samsung Spinpoint M7 HM320II, 300W be quiet! Pure Power L7, TT-Budget S2-1600, EKL Alpenföhn Panorama, verpackt in einem Techsolo TC-380 HTPC Gehäuse


    yavdr 0.5: Intel DH67GD, Intel Pentium G620 2x 2.60GHz So.1155, 60GB Corsair Force 3 SSD, 8GB Ram, Linux4Media S2 ver 5.4, Asus ENGT 520 Silent, CoHaus CIR


    TV: Panasonic 42" Plasma TH-42PV45

  • Hey - prima Sache. Nach dem Umstieg auf den Enigma Skin ist mir aufgefallen, dass die Sache etwas traege geworden ist - bei einfachen Skins ist das Problem wohl nicht so stark zu spueren gewesen. Jetzt laeuft es wieder fluessig.

    H: MSI 651p, Celeron 2.4GHz, 512MB, 300GB, DVD, DXR3, TT Budget, CinergyT2, gLCD 128x64, PSOne
    S: SuSE 9.1 Kernel 2.6.21.5 vdr-1.4.6.1 - jumpplay-0.9-1.4.0
    P: cdda-0.1.0 dvd-0.3.6_b03 dxr3-0.2.7 epgsearch-0.9.22 femon-1.1.2 graphlcd-0.1.5 graphtft-0.0.15 mp3/mplayer-0.10.0 osdteletext-0.5.1 radio-0.2.0 streamdev-server-0.3.3-pre3-geni text2skin-1.1-cvs_ext-0.10 vcd-0.7
    A: lirc-0.8.1 noad-0.6.0 nvram-wakeup-0.97 vdradmin-am-3.5.2 vdrsync-0.1.3PRE1 VDRsyncGUI-041222

  • hätte jemand die möglichkeit das für linvdr zu kompilieren? ich kenne mich leider damit nicht aus und hab auch nich das benötigste zeug dazu

    Bitte nachsicht mit Newbie Fragen, wir haben alle mal angefangen
    Hardware1: Antec NSK 2400 Moded, AMD XP 1700+ @ Athlon 1100 + Heatepipe Towerkühler, 512 MB Ram, Pfuijitsu FF Rev.1.3 4MB+Spannungsmod, psone TFT
    Software: TT LinVDR 1.4.7 ext30 + Dr.Seltsam Kernel
    Hardware2. ScenicS 900mhz Celeron FF 1.3 easyvdr 0.6

  • Hallo chr13,


    schöne Sache! Tolle Arbeit! Endlich reagiert das text2skin mal etwas schneller :)


    Das ganze habe ich gerade durch easyvdr laufen lassen. Läuft bisher ohne Probleme.


    Viele Grüße
    VSammy

  • Zitat

    Original von TriBun
    hätte jemand die möglichkeit das für linvdr zu kompilieren? ich kenne mich leider damit nicht aus und hab auch nich das benötigste zeug dazu


    Ist in Arbeit! Musste ein paar Keinigkeiten Anpassen, aber geht!


    Gruss


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

  • Mir ist noch folgendes aufgefallen:


    [Blockierte Grafik: http://vdr.gekrumbel.de/text2skin-ng/ffwd.jpg]


    Beim vorspulen (ohne vorher die OK-Taste gedrückt zu haben) erscheint nur dieser hellblaue Streifen. Kann das jemand bestätigen?


    Grüße
    Michi

    Wohnzimmer: Techsolo TC-400 :: ASUS P5N7A-VM :: Intel Core 2 Duo E7400 :: GeForce 9300 onboard :: vdr 1.7.15 e-tobi ::
    In Rente: Pimped Scenic 600 (Bilder und Aufbau) :: PIII 600Mhz :: Hauppauge Nexus-S 2.1 4MB :: vdr 1.5.2 e-tobi ::


    "Wer denkt, dass Volksvertreter das Volk vertreten, der glaubt auch, dass Zitronenfalter Zitronen falten." Zeit zum ändern!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!