Gpg 1.13 ~ 1.14

41
GPG Study 1.13 | 1.14 Devrookie 권승진 1.13 실시간 통계와 게임 내 디버깅 1.14 실시간 게임 내 프로파일링

Transcript of Gpg 1.13 ~ 1.14

Page 1: Gpg 1.13 ~ 1.14

GPG Study 1.13 | 1.14

Devrookie

권승진

1.13 실시간 통계와 게임 내 디버깅

1.14 실시간 게임 내 프로파일링

Page 2: Gpg 1.13 ~ 1.14

들어가기 전에…

Page 3: Gpg 1.13 ~ 1.14

실시간 통계와 게임 내 디버깅

Page 4: Gpg 1.13 ~ 1.14

목차

• 게임 내 디버깅이 무엇인가?

• 왜 사용하는가?

• 실제 사용 예

• 장, 단점

Page 5: Gpg 1.13 ~ 1.14

게임 내 디버깅이 무엇인가?

하하~! 몬스터가 플레이어

의 접근을 감지하는 기능

을 만들었어!!!

이제 한번 실행시켜볼까?

주인공

Page 6: Gpg 1.13 ~ 1.14

게임 내 디버깅이 무엇인가?

뭐야!!!왜 걸렸는데 날 쳐

다보지 않는거지??

Page 7: Gpg 1.13 ~ 1.14

게임 내 디버깅이 무엇인가?

아~! 타겟은 재대로 잡았는데,

위치를 잘못 얻어오네!?

Page 8: Gpg 1.13 ~ 1.14

게임 내 디버깅이 무엇인가?

아~! 타겟은 재대로 잡았는데,

위치를 잘못 얻어오네!?

Page 9: Gpg 1.13 ~ 1.14

게임 내 디버깅이 무엇인가?

이렇게 하는 방법입니다.

Page 10: Gpg 1.13 ~ 1.14

왜 사용하는가?

• 디버깅 시간 절약

– 알트탭 시간이 의외로 만만치 않다.• 알트탭 할 일이 없다.

– 간단한 수치 조정은 화면 안에서 바로 가능하다.

• 컴파일 시간 & 로딩 시간이 확연히 줄어든다.

– 바뀐 결과가 바로 눈에 보인다.

• 집중력 유지

Page 11: Gpg 1.13 ~ 1.14

실제 사용 예

• 미리 만들어진 stat.h,cpp 파일을 간단히 사

용해보고,

• 실시간 게임 내 디버깅 툴이 어떤 형식을 갖

추고 있는지 알아보자.

Page 12: Gpg 1.13 ~ 1.14

구조

CStatBase

CStatPage

CStatPage

CStatPage

.

.

.

CStatEntry

CStatEntry

.

.

CStatEntry

CStatEntry

.

.

<Static Class>

Page 13: Gpg 1.13 ~ 1.14

실제 사용 예

Page 14: Gpg 1.13 ~ 1.14

실제 사용 예

<프로그램 시작 시> 초기화 하고

<프로그램 업데이트 시>

키보드 상태 삽입해주고,

출력한다.

(내용을 담을 문자배열) : 여기에 출력될 모든 내용이 들어가게 된다.

Page 15: Gpg 1.13 ~ 1.14

실제 사용 예

사용하고 싶은 곳에서 등록만 하면 끝

Page 16: Gpg 1.13 ~ 1.14

실제 사용 예

Page 17: Gpg 1.13 ~ 1.14

실제 사용 예

Page 18: Gpg 1.13 ~ 1.14

실제 사용 예

아무것도 없는 곳에서

stat.h 추가하고 한 줄 추가하면

끝이다.

Page 19: Gpg 1.13 ~ 1.14

창에 띄우는건 됐는데…

이게 끝?

Page 20: Gpg 1.13 ~ 1.14

변경 안하고, 첨부된 파일 stat.h, stat.cpp

그대로 쓰실 생각이라면…..

F12 : 창 켜기/끄기

F11 : 값 에딧 기능 켜기/끄기

에딧 기능이 켜져 있을 때

+키 : 수치 증가

- 키 : 수치 감소

Shift키 : 누르고 있을 때 수치 * 10

Ctrl키 : 누르고 있을 때 수치 * 100

Up키 : 편집할 Entry 변경 위로

Down키 : 편집할 Entry 변경 아래로

PageUp : 페이지 앞으로

PageDown : 페이지 뒤로

Page 21: Gpg 1.13 ~ 1.14

변경 안하고, 첨부된 파일 stat.h, stat.cpp

그대로 쓰실 생각이라면…..

F12 : 창 켜기/끄기

F11 : 값 에딧 기능 켜기/끄기

에딧 기능이 켜져 있을 때

+키 : 수치 증가

- 키 : 수치 감소

Shift키 : 누르고 있을 때 수치 * 10

Ctrl키 : 누르고 있을 때 수치 * 100

Up키 : 편집할 Entry 변경 위로

Down키 : 편집할 Entry 변경 아래로

PageUp : 페이지 앞으로

PageDown : 페이지 뒤로이것 외에도 여러가지 기능을

개별로 추가해서 사용하시면 됩니다.

Page 22: Gpg 1.13 ~ 1.14

몇 가지 주의 할 점

• stat화면에서 변하는 변수 값을 적용하려면 포인터로 해야 한다는 당연한 이야기.

• Update시마다 갱신되는 변수 값은 바뀌어도 적용되지 않을 수 있다.

• 여러 개 찍어내야 하는 클래스(몬스터라거나)들의변수은 static으로 선언한 변수를 가지면 안된다.

Page 23: Gpg 1.13 ~ 1.14

장점

• 장점

– 어느 코드에서나 쉽게 변수 추가가 가능하다.

– 간략한 코드로 쉽게 디버깅 할 수 있다.

– 페이지 단위로 여러 정보를 볼 수 있다.

– 수치 변화를 실시간으로 볼 수 있다.• 범위 지정도 가능

Page 24: Gpg 1.13 ~ 1.14

단점

• 단점

– 필요한 변수형태를 직접 제작해야 한다.

Page 25: Gpg 1.13 ~ 1.14

실시간 게임 내 프로파일링

Page 26: Gpg 1.13 ~ 1.14

목차

• 프로파일링이란?

• 실제 사용 예

• 구현 원리

Page 27: Gpg 1.13 ~ 1.14

프로파일링이란?

코드의 병목 지점을 빠르게 찾을 수

있도록 하는 기법

Page 28: Gpg 1.13 ~ 1.14

프로파일링이란?

오! 맙소사 FPS가 왜이

렇게 떨어진거지??

Page 29: Gpg 1.13 ~ 1.14

프로파일링이란?어디가 문제인지 모르겠군!!

함수호출을 하나씩 끄면서

확인해봐야겠어!

물리 업데이트 함수 꺼보고

컴파일 & 실행

GUI업데이트 함수 꺼보고

컴파일 & 실행

.

.

.

.

1시간이 지나고..

3시간이 지나고...

.

Page 30: Gpg 1.13 ~ 1.14

프로파일링이란?어디가 문제인지 모르겠군!!

함수호출을 하나씩 끄면서

확인해봐야겠어!

물리 업데이트 함수 꺼보고

컴파일 & 실행

GUI업데이트 함수 꺼보고

컴파일 & 실행

.

.

.

.

1시간이 지나고..

3시간이 지나고...

.

Page 31: Gpg 1.13 ~ 1.14

프로파일링이란?

실시간으로 함수들의 호출

시간이 얼마인지 알아내는 기법

실시간으로도,

맨 끝에 로그로 남기기도

Page 32: Gpg 1.13 ~ 1.14

실제 사용 예

• 미리 만들어진 profile.h, profile.cpp파일을

보고,

• 프로파일링 도구라는 것은 어떤 기능을 갖

추고 있는지 알아보자.

Page 33: Gpg 1.13 ~ 1.14

실제 사용 예

Start와 End로 프로파일링 하고

싶은 범위만 지정하면 됩니다.

초기화 하고,

Page 34: Gpg 1.13 ~ 1.14

실제 사용 예

<결과를 계산하여 버퍼에 저장하는 코드>

사용자의 렌더링 환경에 맞게 변경 가능

Page 35: Gpg 1.13 ~ 1.14

실제 사용 예

• 결과물평균수행 비율 (전체에서 몇 %인가?)

최소수행 비율 (전체에서 몇 %인가?)

최대수행 비율 (전체에서 몇 %인가?)

한프레임당 호출 횟수

함수 이름몬스터는 2마리인가봐요.

Page 36: Gpg 1.13 ~ 1.14

실제 사용 예

• 결과물

들여쓰기 -> 내포 관계

MainLoop안에서 GUI Update코드를 호출

MainLoop안에서 Player Update코드를 호출

Page 37: Gpg 1.13 ~ 1.14

실제 사용 예

• 결과물

GUI 업데이트는

한 프레임에서 13.9%를 차지한다.

몬스터의 상황 업데이트는

한 프레임에서 1.4%를 차지한다.

Page 38: Gpg 1.13 ~ 1.14

실제 사용 예

• 결과물

한 프레임에서

GUI, Player, Creep업데이트

이외의 것들은 83.4%를 차지한다.

Page 39: Gpg 1.13 ~ 1.14

장점

• 함수의 부하 정도를 한눈에 알 수 있다.

– 논리적인 버그를 미리 잡을 수 있다.

– 병목 지점을 쉽게 찾을 수 있다.

Page 40: Gpg 1.13 ~ 1.14

간단한 구현 원리

• 코드 첨부

Page 41: Gpg 1.13 ~ 1.14

참고자료

• GPG 1권 내용과 예제코드