# 임베디드 Linux의 선택적 기능 활성화

> Enable optional features to improve your application performance.

아래의 선택적 기능을 활성화하여 애플리케이션의 성능을 높일 수 있습니다.

## 화면 로딩##loading-screen

임베디드 Linux 플레이어를 시작하면 별도의 로딩 화면이 나타납니다(일반적으로 레퍼런스 시스템에서는 200ms 이내). 여기에는 [Player Settings](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) 창에서 구성한 2D 이미지가 포함되어 있습니다. 초기 장면 콘텐츠는 로딩 화면 뒤에 로드된다는 점을 제외하고는 여전히 사용할 수 있습니다.

## GLES3의 셰이더 캐시 지속성##shader-cache-persistence-for-gles3

임베디드 Linux는 Unity 플레이어가 설치된 기기에서 바이너리 셰이더 캐싱을 지원하여 시작 타이밍을 개선합니다. 캐시는 셰이더를 로드한 후 런타임 시점에 생성됩니다. 이 캐시는 임시 폴더 `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/UnityShaderCache/`에 기록되므로 시스템을 재시작할 때 지울 수 있습니다.

시스템이 재시작될 때 셰이더 캐싱을 사용하려면 다음 과정을 따라 캐시를 플레이어 데이터에 복사하십시오.

1. Unity 플레이어를 타겟 시스템에 배포합니다.
2. 애플리케이션을 실행하고 모든 셰이더가 터치되었는지 확인합니다.
3. `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/UnityShaderCache/`의 모든 파일을 `[PATH_TO_PLAYER]/Data/UnityShaderCache/`로 복사합니다.

**참고:**

* 플레이어가 업데이트될 때마다 캐시를 새로 고쳐야 합니다.
* 캐시는 디바이스별로 다르므로, 정확히 동일한 하드웨어 및 소프트웨어 구성을 가진 기기 간에만 캐시를 공유해야 합니다.

## Vulkan의 파이프라인 캐시 지속성##pipeline-cache-persistence-for-vulkan

임베디드 Linux는 Unity 플레이어가 설치된 기기에서 바이너리 Vulkan 파이프라인 캐싱을 지원하여 시작 타이밍을 개선합니다. 바이너리 Vulkan 파이프라인 캐시는 Vulkan 파이프라인을 사용할 때 런타임 시점에 생성됩니다. 이 캐시는 임시 `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/vulkan_pso_cache.bin` 파일에 기록되므로 시스템을 재시작할 때 지울 수 있습니다.

시스템이 재시작될 때 파이프라인 캐싱을 사용하려면 다음 과정을 따라 캐시를 플레이어 데이터에 복사하십시오.

1. Unity 플레이어를 타겟 시스템에 배포합니다.
2. 애플리케이션을 실행하고 모든 파이프라인이 사용되고 있는지 확인합니다.
3. `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/vulkan_pso_cache.bin` 파일을 `[PATH_TO_PLAYER]/Data`에 복사합니다.

**참고:**

* 플레이어가 업데이트될 때마다 캐시를 새로 고쳐야 합니다.
* 캐시는 디바이스별로 다르므로, 정확히 동일한 하드웨어 및 소프트웨어 구성을 가진 기기 간에만 캐시를 공유해야 합니다.

## 시작 시간 로그##startup-time-logging

시작 시간 로그는 애플리케이션을 시작하는 데 걸리는 시간입니다. 이는 시스템 안전 및 규제 요건에 중요한 지표로서 자주 사용됩니다.

임베디드 Linux의 시작 시간 로그에는 애플리케이션 실행 이후의 지속 시간 또는 총 시간(밀리초)이 포함됩니다. 시작 시간 로그의 유형은 2가지 입니다.

* **Real:** 시간 계산에 사용되는 스톱워치와 마찬가지로 시계 기준으로 흐르는 실제 시간입니다.
* **User:** 애플리케이션 또는 해당 스레드 중 하나가 CPU 코어에서 소비한 시간입니다. 애플리케이션을 시작할 때 여러 스레드가 사용 중일 경우 실제 시간보다 더 길어질 수 있습니다.

C#에서 시작 타이밍 로그를 추가하려면 다음을 사용하십시오.

`HmiPlatform.LogStartupTiming("log tag");`

결과는 다음 `Player.log` 줄에 표시됩니다.

`[TIMING::STARTUP] log tag: Real: xxx ms | User: yyy ms`

여기에는 플레이어 시작 시간 이후 밀리초 단위의 **로그 태그**, **실제 시간(xxx)**, \*\*cpu 시간(yyy)\*\*이 포함됩니다.

`#if UNITY_EMBEDDED_LINUX_API ... #endif`를 사용하여 코드를 보호할 수 있습니다.

**참고:** **Time** 커맨드와 동일한 용어를 사용하여 실제 시간과 CPU 시간을 참조할 수 있습니다. 자세한 내용은 메인 [Linux](https://man7.org/linux/man-pages/man7/time.7.html) 매뉴얼을 참조하십시오.

### 출력 예시##example-output

```plaintext
[TIMING::STARTUP] Initial probing done: Real: 19 ms | User: 11 ms
[TIMING::STARTUP] SDL Initialized: Real: 64 ms | User: 54 ms
[TIMING::STARTUP] Scripting runtime loaded: Real: 97 ms | User: 86 ms
[TIMING::STARTUP] Plugins loaded: Real: 97 ms | User: 87 ms
[TIMING::STARTUP] Engine initialized (nogfx): Real: 104 ms | User: 94 ms
[TIMING::STARTUP] Player Prefs loaded: Real: 104 ms | User: 94 ms
[TIMING::STARTUP] Screen initialized: Real: 139 ms | User: 112 ms
[TIMING::STARTUP] Engine initialized (gfx): Real: 187 ms | User: 161 ms
[TIMING::STARTUP] Gfx initialized: Real: 190 ms | User: 163 ms
[TIMING::STARTUP] Input initialized: Real: 190 ms | User: 163 ms
[TIMING::STARTUP] SPLASH - Begin: Real: 190 ms | User: 164 ms
[TIMING::STARTUP] SPLASH - Primary scene assets loaded (async): Real: 2197 ms | User: 1670 ms
[TIMING::STARTUP] SPLASH - All engine initial states established: Real: 2197 ms | User: 1670 ms
```

스크립트 API를 사용한 커스텀 이벤트의 출력

`[TIMING::STARTUP] HELLO!!: Real: 2198 ms | User: 1671 ms`

`boot.config` 출력에서 `platform-hmi-quit-after-frame`을 지정하면 프레임 번호 `X`까지 로그에 다음이 포함됩니다. 여기서 `X`는 부트 설정 값에 제공된 숫자입니다.

`[TIMING::STARTUP] Frame 1 rendered: Real: 2209 ms | User: 1687 ms`

`[TIMING::STARTUP] Frame 2 rendered: Real: 2210 ms | User: 1692 ms`

## Wayland로 EVDEV 입력 처리##evdev-input-handling-with-wayland

Wayland에서 실행하는 동안 `EVDEV SDL2` 입력 드라이버를 활성화하려면 `-platform-embedded-linux-wayland-enable-evdev-input` 인자를 사용하여 플레이어를 시작하십시오. 또한 이를 `Data/boot.config`에 있는 설정 파일에 `platform-embedded-linux-wayland-enable-evdev-input=1`로 추가할 수도 있습니다.

## Wayland 강제 사용##force-to-use-wayland

X11과 Wayland 윈도잉 시스템을 모두 사용할 수 있는 시스템에서는 환경 변수를 `SDL_VIDEODRIVER=wayland`로 설정하여 Unity 플레이어가 Wayland을 사용하도록 강제할 수 있습니다.

## 커맨드 라인 인자##command-line-arguments

커맨드 라인에서 Unity 임베디드 Linux 플레이어를 실행하고 인자를 전달하여 플레이어가 실행하는 방법을 변경할 수 있습니다.

**참고:** 모든 커맨드 라인 인자는 Unity 에디터 및 `boot.config` 설정보다 우선합니다.

| CLI 인자                                                | 설명                                                                                                                                                                                                                                                                                                                                                                    |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `-log-startup-times-and-quit`                         | **(지원 중단 예정)** 첫 번째 프레임을 렌더링한 후 플레이어를 종료합니다.                                                                                                                                                                                                                                                                                                                          |
| `-platform-hmi-force-srgb-blit`                       | 강제 `srgb-blit` 설정을 변경합니다. 자세한 내용은 [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Rendering** > **Color Space**를 참조하십시오.                                                                                                                                                            |
| `-platform-hmi-quit-after-frame`                      | 로깅을 활성화합니다. [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **Logging**을 참조하십시오.                                                                                                                                                                                  |
| `-platform-hmi-log-startup-times`                     | 로깅을 활성화합니다. [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **Logging**을 참조하십시오.                                                                                                                                                                                  |
| `-platform-hmi-single-gl-context`                     | GLES에 대한 컨텍스트 공유를 비활성화합니다. **참고:** 인자가 멀티 디스플레이 지원을 비활성화합니다.                                                                                                                                                                                                                                                                                                          |
| `-platform-hmi-cpu-configuration <configuration>`     | 플레이어의 CPU 설정을 지정합니다. 이 인자는 문자 H(고성능 코어), L(저성능 코어) 또는 D(비활성화 코어)의 조합이 포함된 문자열을 기대합니다. 예를 들어 `DHLL`는 첫 번째 코어 사용을 비활성화하고, 두 번째 코어를 High로, 세 번째와 네 번째 코어를 4+ 코어 CPU에서 Low 성능으로 태그합니다. [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **CPU configuration**을 참조하십시오. |
| `-platform-hmi-player-data-path`                      | `.config` 및 로그 파일을 저장할 시스템의 디렉토리 경로를 입력합니다. [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **Player Data path**를 참조하십시오.                                                                                                                                         |
| `-platform-hmi-force-vsync-count [C]`                 | 각 프레임 간에 전달할 수 있는 수직 동기화 횟수입니다. 0으로 설정하면 수직 동기화가 완전히 비활성화되고, -1로 설정하면 `QualitySettings`에 설정된 값을 사용합니다.                                                                                                                                                                                                                                                                |
| `-platform-embedded-linux-enable-gamepadinput`        | 게임 컨트롤러 설정을 변경합니다. [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **Enable Game Controllers**를 참조하십시오.                                                                                                                                                           |
| `-platform-embedded-linux-offscreen-video`            | 플레이어가 SDL2의 오프스크린 렌더링 드라이버를 사용하도록 설정합니다. 이는 시뮬레이션과 렌더 서버 생성에 유용합니다. 모든 렌더링은 오프스크린이지만 여전히 GPU로 가속화됩니다. **참고:** 이 기능을 사용할 경우 `Application.targetFrameRate`를 설정하여 CPU/GPU 사용량을 제한할 수 있습니다.                                                                                                                                                                               |
| `-platform-embedded-linux-wayland-enable-evdev-input` | Wayland에서 실행하는 동안 EVDEV SDL2 입력 드라이버를 활성화합니다. 자세한 내용은 [Wayland로 EVDEV 입력 처리](#EVDEV)를 참조하십시오.                                                                                                                                                                                                                                                                         |

## 추가 리소스##additional-resources

* [임베디드 Linux 플레이어 설정](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md)
* [Linux 매뉴얼 페이지](https://man7.org/linux/man-pages/man7/time.7.html)
