# 为嵌入式 Linux 启用可选功能

> Enable optional features to improve your application performance.

您可以启用以下可选功能来提高应用程序的性能。

## 加载场景##loading-screen

启动嵌入式 Linux 播放器时，将显示一个单独的加载屏幕（在我们的参考系统上，通常会在 200 毫秒内出现），其中包含在 [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 Player 的设备上进行二进制着色器缓存，以优化启动时间。缓存是在加载着色器后在运行时创建的。当此缓存写入临时文件夹时：`[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/UnityShaderCache/`，因此可以在重新启动系统时将其擦除。

要在系统重新启动时使用着色器缓存，请按照以下步骤将缓存复制到播放器数据中：

1. 将 Unity Player 部署到目标系统。
2. 运行应用程序并确保触及所有着色器。
3. 将所有文件从 `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/UnityShaderCache/` 复制到 `[PATH_TO_PLAYER]/Data/UnityShaderCache/`。

**注意：**

* 每次更新播放器时，都必须刷新缓存。
* 由于缓存特定于设备，因此只能在具有相同硬件和软件配置的设备之间共享缓存。

## Vulkan 的管线缓存持久性##pipeline-cache-persistence-for-vulkan

嵌入式 Linux 支持在安装 Unity Player 的设备上进行二进制 Vulkan 管线缓存，以优化启动时间。使用 Vulkan 管线时，会在运行时创建二进制 Vulkan 管线缓存。当此缓存写入临时 `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/vulkan_pso_cache.bin` 文件时，可以在重新启动系统时将其擦除。

要在系统重新启动时使用管线缓存，请按照以下步骤将缓存复制到播放器数据中：

1. 将 Unity Player 部署到目标系统。
2. 运行应用程序并确保正在使用所有管线。
3. 将 `[TEMP]/[COMPANY_NAME]/[PROJECT_NAME]/vulkan_pso_cache.bin` 文件复制到 `[PATH_TO_PLAYER]/Data`。

**注意：**

* 每次更新播放器时，都必须刷新缓存。
* 由于缓存特定于设备，因此只能在具有相同硬件和软件配置的设备之间共享缓存。

## 启动时间日志##startup-time-logging

启动时间记录指的是应用程序启动所花费的时长。它通常用作系统安全和监管要求的关键指标。

嵌入式 Linux 中的启动时间日志包括自应用程序启动以来的持续时间或总时间（以毫秒为单位）。有两种类型的启动时间日志：

* \*\*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` 参数启动播放器。也可以将其作为 `platform-embedded-linux-wayland-enable-evdev-input=1` 添加到位于 `Data/boot.config` 的配置文件中。

## 强制使用 Wayland##force-to-use-wayland

在同时支持 X11 和 Wayland 窗口系统的系统中，可以通过将环境变量设置为 `SDL_VIDEODRIVER=wayland` 来强制 Unity Player 使用 Wayland。

## 命令行参数##command-line-arguments

可从命令行启动 Unity Embedded Linux Player，并传递参数来更改 Player 的执行方式。

\*\*注意：\*\*所有命令行参数都优先于 Unity Editor 和 `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（禁用核心）的组合。例如，在 4 核以上 CPU 上，`DHLL` 表示禁用第一个核心，将第二个核心标记为 “高性能”，将第三个和第四个核心标记为 “低性能”。请参阅 [**Player Settings**](/engine/6000.0/manual/platform-specific/embedded-systems/embedded-linux/get-started/player-settings.md) > **Configuration** > **CPU 配置**。 |
| `-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 路径**。                                                                                             |
| `-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 Player 设置](/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)
