如何找到进程正在使用哪个 Graphic API?

How to find which Graphic API, process is using?

一些应用和游戏可以同时使用多个图形 API,例如 OpenGLES 或 Vulkan,每个使用一次,例如使用 OpenGLES 和 Vulkan 的 PUBG™ Mobile 或 CoD™ Mobile,但您可以选择哪个 api 在进程运行时使用。

我试过 lsof -p <pid> | grep -i -e gles -e vulkan,它给了我 *GLES.solibvulkan.so,这意味着它们不是在运行时加载的,而是在编译时链接的。

问题:我如何找出哪个 API 进程正在使用并调用其函数来渲染 linux 下的帧? (android 基本上是基于 linux 的 OS)

您需要附加一个调试器或插入一个 API 层来监控正在使用哪个 API 的绘制调用。你可以用采样分析器做同样的事情。所有屏幕应用程序中的 Android UI 框架也使用 GLES,因此您需要注意这一点。 (虽然在全屏游戏中,UI 框架除了在启动时可能会进行一些设置调用之外不应该做任何事情。)所有这些都要求应用程序是可调试的。