๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป ๊ฐœ๋ฐœ์ž ์ด์•ผ๊ธฐ/์•ˆ๋“œ๋กœ์ด๋“œ ์‚ฝ์งˆ๊ธฐ

ํ™”๋ฉด์ด ๋ญ”๊ฐ€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๋Š”๊ฑฐ ๊ฐ™๋‹ค. ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

by ์ •์„ ํ•œ 2024. 6. 26.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์•ฑ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๋ญ”๊ฐ€ ํ™”๋ฉด์˜ ๋ Œ๋”๋ง ์†๋„๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ๋‹ค๊ณ  ๋А๊ปด์งˆ ๋•Œ๊ฐ€ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™์ง€๋„ ์•Š๊ณ  ๋ฌด์–ธ๊ฐ€ ๋Œ€๋‹จํ•œ ํ™”๋ฉด์ด ์•„๋‹Œ๋ฐ, ์™œ ์˜ค๋ž˜ ๊ฑธ๋ฆด๊นŒ? ์‹ถ์€ ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿด ๋•Œ Android Studio ๊ฐœ๋ฐœ ํˆด์—์„œ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์ฐพ์•„๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ์˜ค๋Š˜์€ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋‹ด์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋‹จ ํ™”๋ฉด์ด ์–ด๋–ป๊ฒŒ ๊ทธ๋ ค์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์กฐ์  ์ดํ•ด๊ฐ€ ํ•„์š”ํ•  ํ…๋ฐ์š”.
์ด ๋ถ€๋ถ„์€ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹๋ฌธ์„œ์˜ ๊ทธ๋ž˜ํ”ฝ ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜ํ”ฝ  |  Android ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ  |  Android Open Source Project

๊ทธ๋ž˜ํ”ฝ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. Android ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„์˜ ์ œ์กฐ์—…์ฒด ๊ตฌํ˜„๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ 2D ๋ฐ 3D์šฉ ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”

source.android.com

ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๊ตฌ์กฐ์ ์ธ ์•„ํ‚คํ…์ฒ˜์™€ ํ™”๋ฉด์ด ๋กœ๋“œ๋˜๋Š”๋ฐ ๊นŒ์ง€์˜ View, Manager ๊ทธ ์™ธ ๊ธฐํƒ€ ๋งŽ์€ ๋‚ด์šฉ์„ ๋ฌธ์„œ์—์„œ๋Š” ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ถ€๋ถ„๋„ ๊ฝค๋‚˜ ์‹ฌ์˜คํ•œ ๋‚ด์šฉ๋“ค์ด ๋งŽ์•„์„œ ์ฐจ์ฐจ ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•˜๊ธด ํ•˜๊ฒ ์ง€๋งŒ
์˜ค๋Š˜์€ ๊ทธ๋ž˜ํ”ฝ ์•„ํ‚คํ…์ฒ˜์™€ ํ™”๋ฉด์ด ๋กœ๋“œ๋˜๋Š” ์‹ค์ œ์ ์ธ ๊ณผ์ •์„ ๋‹ค๋ฃจ์–ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์‹ค์ œ๋กœ ๋ Œ๋”๋ง ๋˜๋Š” ๊ณผ์ •

๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์‹ค์ œ์ ์œผ๋กœ ๊ทธ๋ ค์ง€๋Š” ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ BufferQueue์— ๋Œ€ํ•ด์„œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

BufferQueue๋Š” Android ๊ทธ๋ž˜ํ”ฝ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•˜๊ณ , Producer์™€ Consumer๋กœ ์ด์–ด์ง€๋Š” Buffer์˜ ์ˆœํ™˜์„ ์ค‘์žฌํ•˜๋Š” Queue์ž…๋‹ˆ๋‹ค. ์ด๋Š” SurfaceFlinger๋กœ ๋ฒ„ํผ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์ด CPU์™€ GPU ์‚ฌ์ด์˜ ํ†ต์‹ ์ž…๋‹ˆ๋‹ค.

  • CPU
    • ํ™”๋ฉด์„ ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ ๋‹ค.
  • GPU
    • ํ™”๋ฉด์„ ํ•˜๋“œ์›จ์–ด์— ์ „๋‹ฌํ•˜์—ฌ ๊ทธ๋ฆฐ๋‹ค

์ด CPU์™€ GPU ์‚ฌ์ด์˜ ํ†ต์‹ ์ด BufferQueue์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Producer -> BufferQueue : queue (์ƒ์‚ฐ์ž๊ฐ€ ์ •์˜ํ•œ ํ™”๋ฉด์˜ ์ •์˜๋ฅผ BufferQueue์— ๋‹ด๋Š”๋‹ค.)
  • BufferQueue -> Consumer : acquire (์†Œ๋น„์ž๊ฐ€ BufferQueue์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋“ค์„ ํ™”๋ฉด์— ๊ทธ๋ฆฐ๋‹ค.)
  • Consumer -> BufferQueue : release (ํ™”๋ฉด์— ๋ชจ๋‘ ๊ทธ๋ ค์ง€๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•œ ํ›„, ๋ฐ˜ํ™˜ํ•œ๋‹ค.)
  • BufferQueue -> Producer : dequeue (์†Œ๋น„์ž๋กœ๋ถ€ํ„ฐ ์ƒ์‚ฐ์ž๋กœ ์ „๋‹ฌ๋œ BufferQueue๋กœ ๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ„ํผ ์š”์ฒญํ•œ๋‹ค.)

์ด๋ฅผํ…Œ๋ฉด, CPU (Producer), GPU (Consumer) ๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋„ค์š”.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ UI๊ฐ€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฐ๋‹ค๊ณ  ๋А๊ปด์ง„๋‹ค๋ฉด, CPU, GPU ์‚ฌ์ด์˜ ํ†ต์‹ ์‹œ๊ฐ„์ด ๋‹ค์†Œ ๊ธธ์–ด์กŒ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ,
์ด๊ฒƒ์„ fps๋‹จ์œ„๋กœ ์ˆ˜์น˜ํ™” ํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ 30fps ์—์„œ 33ms ์ด์ƒ, 60 fps์—์„œ 16ms ์ด์ƒ ๊ฑธ๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Android Studio ์—์„œ ๋””๋ฒ„๊น…ํ•ด๋ณด๊ธฐ

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ms ๋‹จ์œ„๋กœ ๋”œ๋ ˆ์ด ๋˜๋Š” ๊ฒƒ์„ ์ฐพ์•„์•ผ๊ฒ ์ฃ , ์ด ๋ถ€๋ถ„์€ Systrace๋ฅผ ํ†ตํ•ด์„œ BufferQueue๋ฅผ ์ถ”์ ํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์ถ”์ ๊ณผ ๊ด€๋ จํ•œ ๊ฐ€์ด๋“œ๋„ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹๋ฌธ์„œ์—๋Š” ์žˆ์–ด์„œ ๊ฐ™์ด ์ฒจ๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋ฌผ๋ก  ์ €๋„ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ CPU์—์„œ ์Šค๋ ˆ๋“œ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘ + ์ฒ˜๋ฆฌ์†๋„๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด Systrace๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๋””๋ฐ”์ด์Šค ์ž์ฒด์—์„œ ํ™œ์„ฑํ™”์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์„ค์ • ๋‚ด์šฉ์€ ์ด๋ฏธ์ง€๋กœ ์ฒจ๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.  ์ œ ํ…Œ์ŠคํŠธ ๋””๋ฐ”์ด์Šค๋Š” ๊ฐค๋Ÿญ์‹œ S6 Lite๋ผ์„œ ์‚ผ์„ฑ ๋””๋ฐ”์ด์Šค๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•˜์‹œ๋Š” ๋ถ„๋“ค์€ ์„ค์ •์˜ ์ด ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ™œ์„ฑํ™”์‹œ์ผœ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Logcat์—์„œ๋Š” Choreographer์—์„œ ์ „๋‹ฌํ•ด ์ฃผ๋Š” log ๋˜ํ•œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Choreographer           I  Skipped 53 frames!  The application may be doing too much work on its main thread.

๋„ˆ๋ฌด ๋ช…ํ™•ํ•˜๊ฒŒ,,, ๋ฉ”์ธ์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•ด์ฃผ๋„ค์š”, ๋กœ๊ทธ๊ฐ€ ๊ท€์—ฝ๋‹ค ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ ํ•œ ์•ฑ ์ฝ”๋“œ์—์„œ๋Š” ๋ณ„๋„ ํ†ต์‹  ์—†์ด UI๋งŒ ๊ทธ๋ ค๋†“๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์„œ ๋‚ด๋ถ€ ๋ฉ”์ธ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ๋กœ์ง ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ด๋ ‡๊ฒŒ ๋œจ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋งˆ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์ œ๋Œ€๋กœ ํ•ด๋ณด๋ ค๋ฉด APIํ†ต์‹ ์ด ๋ฌถ์ด๊ณ  ์ฝ”๋ฃจํ‹ด์„ ํ†ตํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด์„œ ์Šค์ผ€์ค„๋ง์„ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•ด ์ค€ ๋’ค์— ๋‹ค์‹œ ํ•ด๋ณด์•„์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋•Œ์—๋Š” ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

์•„๋งˆ ์ด ํผํฌ๋จผ์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ฃผ์ œ๋กœ ๋ช‡ ๋ฒˆ ๋” ํฌ์ŠคํŒ…์„ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ์— ์ฐพ์•„๋ณด๋ฉด์„œ ๋А๋‚€ ๋ถ€๋ถ„์ธ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๋”ฅํ•œ ์˜์—ญ์ธ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•