Inside ArenaNet: Chromium Embedded Framework in Guild Wars 2

  • Hier ist Ben Dunkin, Senior Engine Programmer im Team von Guild Wars 2. Ich wurde letztes Jahr hinzugeholt, um das neu gegründete Engine Team abzurunden. Das ist das gleiche Team, das auch an der Aktualisierung von DirectX 11 arbeitet. Dieses Projekt läuft recht gut, aber heute möchte ich euch von etwas anderem erzählen: Wir haben CoherentUI durch Chromium Embedded Framework ersetzt!

    Was ersetzen wir?

    Wir ersetzen CoherentUI, eine Library, mittels der wir einen Webbrowser im Spiel ausführen können. Wir verwenden CoherentUI an mehreren Positionen, beispielsweise bei Büchern im Spiel, im Launcher oder im Handelsposten. Wir ersetzen die Library durch Chromium Embedded Framework (im Folgenden CEF). CEF wird verwendet, um die UIs vieler anderer Programme zu erstellen, beispielsweise in Steam, im Battle.net-Launcher und im Launcher von Epic Games.

    Warum ersetzen wir es?

    Einer der Schwerpunkte des Engine Teams liegt auf der Modernisierung der Codebase. Wir haben eine Menge Code, an dem schon länger nichts mehr verändert wurde. Das wurde zu einem Problem für uns, da wir alte Systeme über ihre Grenzen strapazieren. Eine erhebliche Menge an Fehlern sind in unseren Third-Party-Librarys begründet, also Code, den wir von Dritten erhalten. Beispiele hierfür sind DirectX9 (für Darstellung auf dem Bildschirm), Havok (für Physik), Umbra (für Verdeckungsberechnung) und CoherentUI (für Teile unserer UI).

    Manche Librarys sind nur schwer zu aktualisieren und erfordern sorgfältige Planung und Kosten-Nutzen-Analysen. Wir haben uns entschlossen, DirectX9 auf DirectX11 zu aktualisieren (mehr dazu in unserem letzten Blog-Beitrag hier). Das ist ein enormer Kraftakt, aber wir gehen davon aus, dass sich das Ergebnis lohnen wird. Allerdings haben wir uns entschlossen, kein Upgrade von Havok durchzuführen. Havok ist noch enger im Spiel integriert als DirectX9 es war, und es besteht ein inakzeptables Risiko, Physikfehler in das Spiel einzuführen, die das Spielerlebnis erheblich schädigen würden.

    Die Library CoherentUI ist einfacher zu aktualisieren, und es gibt mehrere Gründe, warum wir sie als Nächstes angegangen sind:

    • CoherentUI unterstützt keine neuen Sicherheitsstandards. Unsere Third-Party-Zahlungsabwicklungspartner haben uns darauf hingewiesen, dass dies in Zukunft ein Problem werden wird. Das ist ein erhebliches Risiko für die Finanzierung der zukünftigen Entwicklung unseres Spiels.
    • CoherentUI wird von seinem Anbieter nicht mehr unterstützt. Wir können weder die Leistung verbessern noch auftretende Fehler selbst beheben. Dies äußert sich letztendlich in nicht behebbaren Handelsposten-Fehlern und Leistungsproblemen nieder.
    • CoherentUI ist alt und bietet nur wenig Unterstützung für moderne Programmierungs-, Formatierungs- und Sprachstandards. Die Library wird nicht von modernen Tools unterstützt, mittels derer wir schneller für sie entwickeln könnten.

    CEF löst diese Probleme und noch mehr. Zahlungsabwickler sind damit zufrieden, die Leistung ist deutlich besser, und es unterstützt moderne Tools und Standards. Außerdem bietet uns die Library deutlich mehr Optionen, die Leistung noch weiter zu verbessern, falls dies erforderlich ist. Wir planen, sie in angemessenen Abständen zu aktualisieren, damit wir bei den Leistungsverbesserungen und Fehlerbehebungen nicht in Rückstand geraten.

    Euch ist vielleicht aufgefallen, dass wir letztes Jahr ein Upgrade für CoherentUI durchgeführt haben; warum folgt nun also das nächste? Das Upgrade letztes Jahr diente der vorübergehenden Lösung des obigen Problems und sollte uns Zeit verschaffen, CoherentUI vollständig auszutauschen. Unsere Zahlungsabwickler waren zufrieden mit der neueren Version von CoherentUI, aber wir wussten, dass es früher oder später auch ihre Anforderungen nicht mehr erfüllen würde.

    Was erwartet euch, nachdem diese Änderung durchgeführt wurde?

    Vielleicht stellt ihr fest, dass der Handelsposten ein wenig flotter läuft, aber das war’s dann auch schon. Unser Ziel ist es, die internen Systeme so transparent wie möglich auszutauschen. Wir möchten sichergehen, dass das Upgrade korrekt läuft, bevor wir uns Verbesserungen der Leistung oder der Funktionalität widmen.

    Allerdings gibt es erhebliche Unterschiede zwischen CoherentUI und CEF, die ihr nicht seht, die uns aber dabei helfen, schneller zu arbeiten. Beispielsweise ist das hier die Guild Wars 2-Website, wie sie von den Librarys angezeigt wird.

    CoherentUI zeigt http://www.guildwars2.com an:

    CEF zeigt http://www.guildwars2.com an:

    CoherentUI zeigt die obere Leiste, das Dropdown-Menü, die Neuigkeiten und die Carousel-Navigation fehlerhaft an. Mit CEF müssen wir um solche Einschränkungen nicht mehr herumarbeiten. Daher können wir die UI schneller entwickeln.

    Hier ein Leistungsprofil des Ladevorgangs des Handelspostens.

    Coherent lädt den Handelsposten:

    CEF lädt den Handelsposten:

    CoherentUI braucht 19,24 Millisekunden, CEF nur 6,99. Zum Vergleich: Ein Spiel, das mit 60 FPS läuft, stellt ein gesamtes Bild in 16,66 Millisekunden dar. Wie ihr seht braucht CEF nur 36 % so lange wie CoherentUI. Das bedeutet, dass wir weniger Zeit für die Optimierung der Web-basierten Benutzeroberfläche aufwenden müssen, weil sie bereits schnell ist.

    Anmerkung: Es gibt einen Unterschied zwischen UI-Leistung und Netzwerkleistung. Manchmal erscheint der Handelsposten träge, weil die Netzwerkanfragen lange dauern, nicht weil die Benutzeroberfläche langsam ist. Das Upgrade auf CEF ändert nichts an der Geschwindigkeit langsamer Netzwerkanfragen.

    Release-Strategie

    Nach unserem letzten versuchten Release, der in einem Rollback endete, stellten einige Leute eine nachvollziehbare Frage: Warum können wir dieses Element nicht nach und nach veröffentlichen, oder die Leute entscheiden lassen, ob sie das neue Element nutzen möchten, wie es bei DirektX11 der Fall war?

    Wir würden diese Änderungen sehr gerne nach und nach veröffentlichen, aber es gibt einige Komplikationen, die das verhindern. Derzeit fehlen uns die Tools, die Änderungen nach und nach zu veröffentlichen, und dieselben Komplikationen, die die schrittweise Veröffentlichung erschweren, gelten auch für das Hinzufügen neuer Tools.

    Für das schrittweise Veröffentlichen von Elementen muss das Spiel unsere Server mit einer Account-ID kontaktieren können, damit wir sehen, wer das neue System verwendet und wer nicht. Der Launcher läuft, bevor ein Spieler sich einloggt; dadurch haben wir das „Huhn/Ei“-Problem. Wir brauchen eine ID, um festzustellen, welches System verwendet werden soll, aber wir brauchen das System, um eine ID abzufragen. Die optionale Nutzung steht vor demselben Problem. Die Einstellungen sind Account-basiert, aber wir kennen den Account noch nicht, wenn der Launcher startet. Zum Hinzufügen eines neuen Konfigurationssystems, das keine Account-ID benötigt, müssten wir auch den Launcher bearbeiten; dann hätten wir dieselben Probleme beim Einführen des neuen Konfigurationssystems, die wir auch beim CEF-System haben. Wir entschieden uns, das Risiko mit einer statt zwei Änderungen zu minimieren, wenngleich wir ein solches Konfigurationssystem möglicherweise in Zukunft hinzufügen werden.

    Bei DirectX11 war eine fehlgeschlagene Initialisierung ein überwindbarer Fehler. Dem Spiel wird mitgeteilt, dass die Initialisierung fehlgeschlagen hat, und das Spiel kann darauf reagieren. Die Reaktion war, dass die Einstellungen auf DirectX9 zurückgesetzt wurden, damit das Spiel beim nächsten Versuch wieder starten konnte. Bedauerlicherweise führen die Probleme mit CEF zu einem sofortigen Absturz des Launchers, weshalb wir nicht automatisch zurück auf CoherentUI wechseln können. Anders gesagt: Wenn etwas schiefläuft, dann bleibt Spielern nur die Möglichkeit, Befehlszeilen-Flags zu bearbeiten. Befehlszeilen-Flags sind eine letzte Maßnahme zur Behebung von Problemen, also betrachten wir schon eine relativ kleine Anzahl von Launcher-Abstürzen als Spieler, die das Spiel nicht spielen können.

    Das Spiel nicht spielen zu können ist eine der schlimmsten Situationen für einen Spieler. Daher wurde der vorherige Release auch so schnell wieder rückgängig gemacht. Dies ist auch der Grund, warum uns ein optionaler Wechsel nichts bringen würde. Bei Spielern, die sich für einen Wechsel entscheiden und Probleme haben, können wir nur reagieren, indem wir die Änderung rückgängig machen. Dies verhält sich bei einem allgemeinen Wechsel ohne Option identisch, nur dass wir bei einem optionalen Wechsel weniger Informationen erhielten, weil ein kleinerer Prozentsatz wechseln würde.

    Wir müssen ein Gleichgewicht finden zwischen dem Minimieren von negativen Auswirkungen für Spieler und dem Maximieren der gewonnenen Informationen. Die Fehler, die auftreten, sind relativ obskur. Sie treten nur bei einem winzigen Teil der Spieler auf, und wir können sie nicht intern reproduzieren. Daher ist es nötig, dass eine größere Anzahl von Spielern das neue System verwendet, damit wir genug Fehlermeldungen erhalten. Da es sich hierbei um ein kritisches System und ein notwendiges Upgrade handelt, haben wir uns entschlossen, mehr Wert auf das Maximieren der Information zu legen. Wir werden begrenzen, wie lange Spieler potenziell nicht spielen können, indem wir die Änderungen schnell rückgängig machen können, sobald wir genug Absturzberichte haben.

    Aktueller Status

    Unser CEF-Release am 14. März führte zu so vielen Problemen, dass wir einen Rollback durchgeführt haben. Wir haben alle Probleme behoben, die wir reproduzieren konnten, und Mitigierungen vorgenommen, von denen wir erwarten, dass sie den Rest lösen.

    Launcher und Handelsposten sind missionskritische Systeme, die umfassend intern getestet werden, bevor wir diese Releases angehen. Unser QA-Team ist grandios, und sie haben dieses Upgrade auf einer breiten Palette von Hardware- und Software-Konfigurationen getestet, aber wir können nicht all die tausende Konfigurationen testen, die unsere Spieler verwenden. Die Male, die der Launcher während unserer wochenlangen internen Tests gestartet wird, sind gering im Vergleich zu auch nur einem Tag, an dem unsere Spieler das Spiel starten. Wir werden einen zweiten Release im Zuge des Updates zum 18. April durchführen, und wenn weitere schwerwiegende Probleme auftauchen, werden wir den Release erneut schnellstens rückgängig machen, bis wir sie beheben können.

    Ich freue mich darauf zu sehen, welche Verbesserungen dieses Upgrade unseren Spielern ermöglichen wird!

    —Ben Dunkin


    Quelle: https://www.guildwars2.com/de/…ium=news&utm_campaign=rss

    ArenaNet Partner

  • Es ist schön zu sehen, dass der Handelsposten jetzt schneller läuft. Das war schon immer richtig nervig. :thumbup:


    Vielleicht bietet CEF jetzt auch die Möglichkeit, mehr Filter in der Suche im TP zu nutzen.

    Mir fehlt vor allem ein Filter, der mir nur Dinge anzeigt, deren Skins ich noch nicht habe. Das würde ne Menge Zeit in der Suche sparen. Oder gibts ihn gar und ich hab ihn noch nicht entdeckt? ?(

  • Mir fehlt vor allem ein Filter, der mir nur Dinge anzeigt, deren Skins ich noch nicht habe. Das würde ne Menge Zeit in der Suche sparen.

    Auf den warte ich auch schon lange :D

    "Die wichtigste Stunde ist immer die Gegenwart." - Lycidas

  • Es ist schön zu sehen, dass der Handelsposten jetzt schneller läuft. Das war schon immer richtig nervig. :thumbup:


    Vielleicht bietet CEF jetzt auch die Möglichkeit, mehr Filter in der Suche im TP zu nutzen.

    Mir fehlt vor allem ein Filter, der mir nur Dinge anzeigt, deren Skins ich noch nicht habe. Das würde ne Menge Zeit in der Suche sparen. Oder gibts ihn gar und ich hab ihn noch nicht entdeckt? ?(

    Dafür ist

    gw2efficiency

    extrem gut geeignet. Es zeigt nicht nur an, welche man noch nicht hat, sondern auch, wie hoch die Kosten sind. Wahrscheinlich kennt ihr die Seite, aber manchmal ist ein daran erinnern doch auch hilfreich.

    Bevor ich die Seite entdeckt habe, habe ich das

    Garderobenlager – Guild Wars 2 Wiki

    genutzt, um zu sehen, welche Skins mir noch fehlen.

    Bye