Namierzyć Laga - opóźnienia

Namierzyć Laga - opóźnienia
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:2 minuty
  • Lokalizacja:Poznań
  • Postów:288
0

Witam. Programuję grę w Visual Studio 2022. Dodałem parę nowych funkcjonalności i gra zaczęła lagować. Jak namierzyć fragmenty kodu odpowiedzialne za opóźnienia ?


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
AD
  • Rejestracja:ponad rok
  • Ostatnio:10 minut
  • Postów:322
1

Dodać logi do kodu.

Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:3 minuty
  • Postów:2070
4

Ja bym szukał profilera dla języka który używasz
jeżeli to c++ może być np. https://github.com/yse/easy_profiler


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:37 minut
3

W visual studio masz wbudowany profiler, "Diagnostic Tools" po prawej. Zwyczajnie włączasz CPU profiling, zaznaczasz na wykresie fragment w którym masz lagi i widzisz ile która funkcja zajęła czasu

screenshot-20241112185533.png
po naciśnięciu na funkcję możesz zobaczyć konkretne drzewko wywołań

screenshot-20241112190506.png
i konkretne miejsce w kodzie:

screenshot-20241112190515.png


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 2x, ostatnio: obscurity
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:2 minuty
  • Lokalizacja:Poznań
  • Postów:288
0

@obscurity Mam coś takiego - jak naduszę "Break All" to zawiesza mi grę
screenshot-20241112190739.png
screenshot-20241112190916.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
edytowany 2x, ostatnio: tBane
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:37 minut
2
tBane napisał(a):

@obscurity Mam coś takiego - jak naduszę "Break All" to zawiesza mi grę

tak, po włączeniu nagrywania musisz zawiesić grę żeby przeanalizować dane


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:2 minuty
  • Lokalizacja:Poznań
  • Postów:288
0

@obscurity a da się jakoś sprawdzać zużycie pamięci i CPU w czasie rzeczywistym ?


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:37 minut
0
tBane napisał(a):

@obscurity a da się jakoś sprawdzać zużycie pamięci i CPU w czasie rzeczywistym ?

no to ci się na wykresie cały czas pokazuje, do analizy pamięci musisz robić snapshoty, ale nie trzeba zatrzymywać aplikacji, analizę CPU można zrobić tylko na zatrzymanej aplikacji, w zasadzie to nie wiem czemu. Może dlatego że sama analiza danych wpływałaby na performance i przekłamywała wyniki?


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
edytowany 2x, ostatnio: obscurity
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:2 minuty
  • Lokalizacja:Poznań
  • Postów:288
0

@obscurity no właśnie mam ten problem, że mi się w czasie rzeczywistym nie wyświetla :-/


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
obscurity
a co masz nad tymi zakładkami "Summary" / "Events" / ...? wygląda to inaczej niż na moim pierwszym screenshocie?
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:2 minuty
  • Lokalizacja:Poznań
  • Postów:288
0

@obscurity Tak to u mnie wygląda.

screenshot-20241112193447.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
obscurity
no to przecież masz tam wykresy na żywo pamięci i CPU na górze
tBane
no tak. Chciałbym jednak mieć coś w stylu listy funkcji i procentowego zużycia pamięci i CPU. Da radę coś takiego odpalić ?
tBane
dzięki za rady :-)
obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:37 minut
1

odpalasz nagrywanie (record CPU profile), grasz normalnie, czekasz na laga, na wykresie będziesz tego laga widział prawdopodobnie w postaci pika na wykresie, zaznaczasz ten fragment, zatrzymujesz grę (break) i masz listę funkcji i procentowe zużycie CPU. Do analizy pamięci robisz snapshot na początku i po momencie który chcesz zanalizować i masz listę alokacji. Czego więcej potrzebujesz?


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:3 minuty
  • Postów:2070
2

@tBane: nie bardzo rozumiem dlaczego zwracasz uwagę na pamięć jak lagowanie jest zwiane z czasem

ja bym szedł w kierunku pomiaru czasu rysowanie klatek i szukana co trwa najdłużej
screenshot-20241112221323.png


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
tBane
a jak to włączyć ?
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:3 minuty
  • Postów:2070
1

a jak to włączyć ?

  1. git clone https://github.com/yse/easy_profiler
  2. w cmake add_subdirectory(....)
  3. target_link_libraries(TWOJA_APLIKACJA easy_profiler)
  4. obejrzyj przyklad https://github.com/yse/easy_profiler/blob/develop/sample/main.cpp

--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Kraków
  • Postów:1999
0

Nie znam się na monitorowaniu aplikacji desktop, bo pracuję z serwerowymi, ale może to podejście wypali jeśli nie chcesz zatrzymywać gry tylko zbierać dane live i potem je analizować. Także weź poprawkę na to, że mogę wygadywać bzdury.

Profilując dostajesz de facto zestaw metryk tudzież coś na kształt tracingu, masz drzewo wywołań itd. Ja bym poszedł dalej i zamiast profilować i zatrzymywać grę, by się czemuś przyjrzeć, zaczął bym sobie instrumentować aplikację metrykami które mnie interesują i w trakcie testów / debugu gdzieś te metryki wrzucał do analizy.

Nie wiem na ile pozwala profiler, ale z własnymi metrykami masz generalnie pełną dowolność, jak tylko jesteś w stanie wyłuskać daną informację, i może to być wszystko co podejrzewasz, że ma wpływ na rozgrywkę / lagi:

  • zużycie CPU przez proces
  • stan puli wątków (jeśli masz)
  • zużycie I/O (dyski, sieć, jeśli są relewantne)
  • metryki z GPU
  • metadane gry jak np. liczba postaci, obiektów, sprajtów itd. najlepiej z podziałem na rodzaje
  • czas renderowania klatki
  • czas przeliczania stanu gry pomiędzy
  • FPSy na monitorze
  • to ile razy na sekundę przeliczasz stan gry (jeśli jest to niezależnie od rysowania)

Takie metryki możesz generować na bieżąco w ramach diagnostyki, zapiąć się do nich jakąś darmową Grafaną i testować, szukać sobie korelacji itd. w przypadku aplikacji serwerowej tak bym zrobił, pomogłoby mi szukać źródeł problemów w kontekście tego, co robię. Nie da mi to dokładnych wywołań funkcji, które powodują problemy, ale zanim zacznę jej szukać da mi to pogląd sytuacji i pozwoli szukać korelacji.


edytowany 1x, ostatnio: superdurszlak
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:3 minuty
  • Postów:2070
1

w easy_profiler masz dwie opcje wszystko oczywiscie w runtime

  • albo zapisujesz próbki do pliku i oglądasz potem
  • albo podlaczas sie po IP i oglądać dane w czasie rzeczywistym

swego czasu używałem tez https://github.com/wolfpld/tracy
ale trochę większa kobyła


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)