μ•ˆλ…•ν•˜μ„Έμš”!


μ΄λ²ˆμ—λŠ”Β μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œΒ κ²Œμž„μ„ μ΅œμ ν™” ν–ˆλ˜ 과정을 정보 κ³΅μœ λ„Β κ²Έν•΄μ„œ μ”λ‹ˆλ‹€.


----------------------


μ–Όλ§ˆμ „μ— μ˜€λžœλ§Œμ— ν•Έλ“œν°μ—μ„œ κ²Œμž„μ„ λŒλ €λ³΄λ‹€κ°€ 렉이 생각보닀 μ‹¬κ°ν•˜λ‹€λŠ” 사싀을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.


λΆ„λͺ… μ˜›λ‚ μ—λŠ” μŒ©μŒ©ν•˜κ²Œ λŒμ•„κ°”μ—ˆκΈ° λ•Œλ¬Έμ—, μ™œ λŠλ €μ§„ 건지 원인을 μ•Œμ•„λ‚΄κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.




1. μœ λ‹ˆν‹° ν”„λ‘œνŒŒμΌλŸ¬λ‘œ 찾아보기


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fd9b58df534f83140e82efd2

κΈ°λ³Έ λ‚΄μž₯ ν”„λ‘œνŒŒμΌλŸ¬μž…λ‹ˆλ‹€.

development buildλ₯Ό ν‚€κ³  apkλ₯Ό λΉŒλ“œν•˜κ³ , adbλ‚˜ 둜컬 λ„€νŠΈμ›Œν¬λ‘œ μ•±μ—Β μ—°κ²°ν•΄μ„œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.


μ‹€μ œ κ²Œμž„μ€‘μ—Β λ ‰μ΄ λΉ‘!ν•˜κ³  κ±Έλ¦¬λŠ” 뢀뢄이 μžˆλŠ”λ°, JITκ°€ λŒ€λΆ€λΆ„ μ›μΈμ΄μ˜€μŠ΅λ‹ˆλ‹€.

그런데 μ΄κ±΄Β ν•΄κ²°ν•˜κΈ°κ°€ κΉŒλ‹€λ‘œμ› μŠ΅λ‹ˆλ‹€. μ½”λ“œλ₯Ό ν•œλ²ˆ λŒλ €μ€˜μ•Όν•˜λŠ”λ°, 감이 μ•ˆμž‘ν˜”μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ κ·Έλƒ₯ IL2CPPλ₯Ό μ“°κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. (μžμ„Έν•œ λ‚΄μš©μ€Β https://blogs.unity3d.com/kr/2015/09/22/kr-csharp-compile-il2cpp/Β μ°Έκ³ )


그런데 슀파크λ₯Ό 작긴 ν–ˆμ§€λ§Œ, μ „μ²΄μ μœΌλ‘œ ν”„λ ˆμž„μ΄ λ–¨μ–΄μ§€λŠ” 건 μ—¬μ „νžˆ ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

느린 뢀뢄을 μ°Ύμ•„λ΄€μ§€λ§ŒΒ λ”±νžˆ λ¬Έμ œκ°€ λ λ§Œν•œ 뢀뢄은 μ—†μ–΄ λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ μœ λ‹ˆν‹° 이벀트 μ‹œμŠ€ν…œμ΄ 생각보닀 많이 λ¨Ήμ—ˆλŠ”λ° 이건 μΊ”λ²„μŠ€μ— 쓸데없이 raycastTargetμ˜΅μ…˜μ„ 많이 켰던 게 μ›μΈμ΄μ˜€μŠ΅λ‹ˆλ‹€.




2. ν”„λ ˆμž„ 디버거

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279a8990d85521bde470eef453c

이것도 μœ λ‹ˆν‹° λ‚΄μž₯ 툴인데, μ €ν¬λŠ” 주둜 배칭이 μ œλŒ€λ‘œ λ˜λŠ”μ§€λ₯Ό 확인할 λ•Œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

렉이 μ‹¬ν•˜κ²Œ κ±Έλ¦¬λŠ” μž₯λ©΄μ—μ„œ 그림자 배칭이 μ•ˆλ˜κ³  μžˆλ‹€λŠ” κ±Έ ν™•μΈν•΄μ„œ κ³ μ³€μŠ΅λ‹ˆλ‹€.


고치고 λ‹€λ‹ˆ 쑰금 빨라진 것 같은 λŠλ‚Œμ΄ λ“€μ—ˆλŠ”λ°, μ—­μ‹œ μ˜›λ‚ μ˜ κ·Έ μŒ©μŒ©ν•œ λŠλ‚Œμ€ μ•„λ‹ˆμ˜€μŠ΅λ‹ˆλ‹€.

그리고 λ‹€λ₯Έ μž₯면을 ν…ŒμŠ€νŠΈν•΄λ³΄λ‹ˆ μ—¬μ „νžˆ λŠλ ΈμŠ΅λ‹ˆλ‹€.





3. Mali Graphics Analyzer


λ Œλ”λ§ν•˜λŠ” 게 느린 건 λŒ€μΆ© μ•Œμ•˜λŠ”λ°, μ •ν™•νžˆ μ–΄λ–€ μš”μ†Œλ₯Ό 그리느라 느린 건지 μ•Œ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

이 λ•Œ μœ μš©ν•œ 게 κ·Έλž˜ν”½μΉ΄λ“œ νšŒμ‚¬μ—μ„œ λ°°ν¬ν•˜λŠ” 뢄석 νˆ΄λ“€μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이게 μ’€ 볡뢈볡이 μ’€ μžˆμŠ΅λ‹ˆλ‹€.

ν•Έλ“œν°λ§ˆλ‹€ νˆ΄μ΄λž‘Β ν˜Έν™˜μ΄ 잘 λ˜λŠ” 것도 있고, 잘 λ˜λŠ” 것도 μžˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” κ°€λŸ­μ‹œS6λ₯Ό μ¨μ„œ Mali Graphics Analyzer둜 ν…ŒμŠ€νŠΈν•΄λ΄€λŠ”λ°, λ‹€λ₯Έ 건 λ‹€ λ˜λŠ”λ°Β μ •μž‘ μ€‘μš”ν•œ Fragment Count 정보λ₯Ό λͺ»μ–»μ–΄μ™”μŠ΅λ‹ˆλ‹€.

μ˜›λ‚ μ—λŠ” λΆ„λͺ… μž˜Β λλŠ”λ°, λ­”κ°€ 버전이 κΌ¬μ΄λ©΄μ„œ 잘 μ•ˆλ˜κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€.

였랜 μ‹œκ°„ μ‚½μ§ˆμ„ ν•΄λ΄€μ§€λ§Œ, λ„μ €νžˆ 문제λ₯Ό ν•΄κ²°ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

κ²°κ΅­ λ‹€λ₯Έ 방법을 찾기둜 ν–ˆμŠ΅λ‹ˆλ‹€.



4. 각쒅 νˆ΄λ“€


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279aacc5c830e1a8c430e7e5b5bviewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fcca51d159148a140eca0017

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279adc90d855c498f100e57791d


λͺ¨λ°”μΌμ—μ„œ 느린 건 PCμ—μ„œλ„ 느릴 거라고 μƒκ°ν•΄μ„œ(λΉ„μœ¨μ μœΌλ‘œ) PCμ—μ„œλ„ μ—¬λŸ¬κ°€μ§€ 검사λ₯Ό ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 툴이 λ™μž‘μ€ 잘 ν•˜λŠ”λ°,Β λ„μ›€λ λ§Œν•œΒ μ •λ³΄λŠ” μ•ˆλ‚˜μ™”μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이 방법은 일단 보λ₯˜ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.




5. systrace

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279f9ca59d05c4e8d470eb45ecf


μœ λ‹ˆν‹° 2019.1λΆ€ν„° systraceλ₯Ό μ§€μ›ν•œλ‹€κ³ Β ν•΄μ„œ μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€λ‘œ ν”„λ‘œνŒŒμΌλ§μ„ ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ„ˆλ¬΄ κ°œκ΄„μ μΈ λ‚΄μš©λ§Œ λ‚˜μ™€μ„œ μ–΄λ–€ μš”μ†Œκ°€ 느린 κ±΄μ§€Β μ•Œ μˆ˜κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

이건 μ œκ°€ μ„ΈνŒ…μ„ μ œλŒ€λ‘œ μ•ˆν•΄μ„œ κ²°κ³Όκ°€ μ΄μƒν•˜κ²Œ λ‚˜μ˜¨ 것 같은데, (μ›λž˜ μ’€ 더 μžμ„Έν•˜κ²Œ λ‚˜μ™€μ•Όν•¨)

무엇을 잘λͺ»ν–ˆλŠ”μ§€ μ•Œ μˆ˜κ°€ μ—†μ–΄μ„œ 일단 보λ₯˜ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.




7. simpleperf


ꡬ글링 도쀑에 simpleperfκ°€ μ’‹λ‹€λŠ” 글을 보게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. (https://www.slideshare.net/JaeseungHa/ndc2018-96510072)

κ·Έλž˜μ„œ λ”°λΌν•΄λ΄€λŠ”λ°, μ²˜μŒμ—λŠ” μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

원인은 μ‚Όμ„±ν°μ—μ„œ adb run-as λͺ…령을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” κ²ƒμ΄μ˜€μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ κ²°κ΅­ μ–΄μ©” 수 없이 λ£¨νŒ…μ„ ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

그리고 λͺ‡μ‹œκ°„에 걸친 μ‚½μ§ˆ 끝에 κ²°κ΅­ 데이터λ₯Ό λ½‘λŠ”λ° μ„±κ³΅ν–ˆμŠ΅λ‹ˆλ‹€


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279faca0adf581edf120e57818a


μ΄μ œκΉŒμ§€λž‘ λ‹€λ₯΄κ²Œ κ²°κ³Όκ°€ μžμ„Έν•˜κ²Œ λ‚˜μ˜€λ‹ˆΒ μƒλ‹Ήνžˆ μœ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

쓸데없이 돌고 있던 코루틴도 λ°œκ²¬ν•΄μ„œ μ œκ±°ν–ˆκ³ , μ—¬λŸ¬ 느린 뢀뢄을 κ³ μ³€μŠ΅λ‹ˆλ‹€.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279acc80cd05f1d82410ee50bad

λ³΄μ‹œλ‹€μ‹œν”Ό 물리 contact callback에 μ˜€λ²„ν—€λ“œκ°€ ν¬λ‹€λŠ” 사싀도 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œ 이벀트λ₯Ό λ°›κ³  μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” 뢀뢄은 μ €λ ‡κ²Œ μž‘μ€λ°, κ·Έκ±Έ ν•˜κΈ° μœ„ν•œ μ€€λΉ„ μž‘μ—…μ€ μ €λ ‡κ²Œλ‚˜ ν½λ‹ˆλ‹€.

κ·Έλž˜μ„œ κ΄€λ ¨λœ 뢀뢄을 고치고, 이 외에도 μžμž˜μžμž˜ν•˜κ²Œ 느린 뢀뢄듀을 κ³ μ³€μŠ΅λ‹ˆλ‹€.


κ·Έ κ³Όμ •μ—μ„œΒ JobSystem도 μ μš©ν•΄λ΄€λŠ”λ° λ°λ“œλ½ 문제 λ•Œλ¬Έμ—Β λ‹€μ‹œ λ‘€λ°±ν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€.



8. λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§


그런데 μ΄λ ‡κ²ŒκΉŒμ§€ μ½”λ“œλ₯Ό μ₯μž‘듯이 μž‘μ•˜λŠ”λ°λ„, μ—¬μ „νžˆ λ­”κ°€ μ‹œμ›ν•œ λŠλ‚Œμ΄ 생기지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‹€κ°€ μš°μ—°νžˆ ν”„λ‘œμ νŠΈ μ„ΈνŒ…μ—μ„œ λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§μ΄ κΊΌμ Έμžˆλ‹€λŠ” 사싀을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ „μ— λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§μ΄ ν•˜λ„Β λΆˆμ•ˆμ •ν•΄μ„œ κΊΌλ†¨μ—ˆλŠ”λ°, μ‹œν—˜μ‚Όμ–΄ μΌœμ„œ λΉŒλ“œλ₯Ό ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

κ²°κ³ΌλŠ” λ†€λΌμ› μŠ΅λ‹ˆλ‹€.

λ”± μ˜ˆμ „μ˜ κ·Έ μŒ©μŒ©ν•œ λŠλ‚Œμ΄ λ°”λ‘œ μž¬ν˜„λμŠ΅λ‹ˆλ‹€.

λͺ‡μΌκ°„μ˜ μ‚½μ§ˆμ΄ λ¬΄μƒ‰ν•˜κ²Œλ„ λΉ¨λΌμ‘ŒμŠ΅λ‹ˆλ‹€.


ν”Œλ ˆμž„κ·Έλž˜ν”„λ‘œ ν™•μΈν•΄λ³΄λ‹ˆ ν™•μ‹€νžˆ λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§μ΄ 도움이 λ˜λŠ” κ±Έ 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279a89b51d358488d430e556087

(λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§ off)


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fdc751810a4adc470e29b66c

(λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§ on)

λ Œλ”λ§ μ“°λ ˆλ“œκ°€ λ¨ΉλŠ” μ‹œκ°„κ³Ό 메인 μ“°λ ˆλ“œκ°€ λ¨ΉλŠ” μ‹œκ°„μ΄ λΉ„μŠ·ν•©λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— CPU μžμ›μ„ 효율적으둜 μ“°κ²Œλ˜λŠ” μ…ˆμž…λ‹ˆλ‹€.



결둠은 λ©€ν‹°μŠ€λ ˆλ“œ λ Œλ”λ§μ„ ν‚€μž.



μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!



------------------- 이전 κΈ€ ---------------------

1편 μ†Œκ°œ

2편 괴물

3편 μ•½νƒˆμž

4편 νŒŒνŽΈμ‹œμŠ€ν…œ

5편 λŒ€μ‰¬νΌμ¦

6편 λΈŒκΈˆμ†Œκ°œ

7편 μŠ€ν”„λΌμ΄νŠΈ μˆœμ„œ 처리

9편 λŒ€ν™” μ‹œμŠ€ν…œ

10편 κ·Έλž˜ν”½ λ¦¬μ†ŒμŠ€ μ œμž‘κ³Όμ •

11편 레벨 ν”„λ‘œν† νƒ€μž… μ˜μƒ

12편 μ§€ν˜• μ‹œμŠ€ν…œ

13편 버렀진 λ ˆλ²¨λ“€

14편 무기 μ‹œμŠ€ν…œ

15편 룬 μ‹œμŠ€ν…œ

16편 폭탄 퍼즐 레벨

17편 λͺ¬μŠ€ν„° μ œμž‘ κ³Όμ •

--------------------------