Systrace分析游戏卡顿问题之王者荣耀CPU资源不足

Unity整合Android , 错误Fatal signal 11 (SIGSEGV) Unity整合Android时异常 把Unity内容整合到Android工程后出现so文件 出现类似异常: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4ab01 in tid 28051 (UnityHardwareCa) 或者 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x3 阅读详情
写在最前

在2018年以前,王者荣耀这款游戏对手机性能的需求很高,只有少数旗舰处理器才能流畅60帧运行,主要原因是游戏本身绝大部分任务集中在一个叫UnityMain的线程中,这个重负载的线程常常会因为CPU没办法满足其性能需求,导致一帧的处理时间超出16ms,进而表现出帧率波动/掉帧。
2018年开始游戏方普及了多线程版本,也就是把原来的一个UnityMain拆分成了两个线程,对于CPU的最大性能需求降低了,在同平台上性能表现当然更好,更稳定

本文的目的是从systrace的角度,来呈现不同的CPU资源(频率)对于游戏帧率的影响,首先是要创造对比测试条件

创造条件
  • 游戏设置 - 王者荣耀
    • 高帧率
    • 单人训练
  • 对比条件
    • 关闭大核
    • 小核1.7GHz VS 小核 825MHz
systrace 分析
1. CPU频率

可以看到8423时间点CPU频率从1.7GHz下降到了825MHz
在这里插入图片描述

2. 游戏帧率

在频率下降之前,游戏帧率大概是50-55fps之间,频率下降到825MHz之后,FPS降低到了40以下

UnityGfxDeviceW线程应该就是负责渲染的
首先通过dequeueBuffer拿到buffer,然后绘制渲染,完成之后调用queueBuffer通知SF这个buffer可以交到屏幕上去显示,这样就完成了一帧
在这里插入图片描述

下图的红栅格线是16.7ms一格,可以看到在8420ms前后,UnityGfxDeviceW完成一帧的时间差距明显
在这里插入图片描述

3. CPU性能影响
  • 首先这是一个很单纯的场景,负载基本一致,没有太大波动
    所以从上面的systrace就可以确认是CPU的性能影响导致,拿50fps以上和30fps左右的UnityGfxDeviceW来对比
  • 可以看到主要部分的时间从11.3ms变成了19.7ms,而且这个期间进程都基本处于running状态
  • 进程所处的CPU性能是一致的

图1 1.7GHz
在这里插入图片描述
图2 825MHz
在这里插入图片描述

所以可以通过绘制一帧UnityGfxDeviceW线程的running时间来确认,这个是由于CPU性能不足导致的掉帧

用systrace方式抓取DDR频率、GPU频率、free memory、FPSGO和sched等信息 阅读详情

相关推荐

unity code-渲染线程流程

GfxDeviceWorker unity通过GfxDeviceWorker建立的一个线程来接收渲染指令,用另一个线程来处理渲染指令和渲染提交。 再GfxDeviceClient的构造函数中创建GfxDeviceWorker并设置指令队列。 WriteValueType: 所有关于设置shaderprogram的,computeprogram,光栅化设置等所有都再GfxDeviceClient中做。然后通过m_CommandQueue->WriteValueType写入指令,.

llsansun的博客 5732

开启多线程渲染后出现大量的Crash信息

UWA一下,你就知道~

UWA—简单优化,优化简单! 1273

Systrace系列12 —— CPU Info 解读

本文主要是对 Systrace 中的 CPU 信息区域(Kernel)进行简单介绍,简单介绍了如何在 Systrace 中查看 Kernel 模块输出的 CPU 相关的信息,了解 CPU 频率、调度、锁频、锁核相关的信息。

tectrol的专栏 1863

Unity 之 Mac启动崩溃线程 -- UnityGfxDeviceWorker 解决方案

Unity打包Mac在macOS Big Sur11.2.2 版本上崩溃,崩溃线程UnityGfxDeviceWorker。

陈言必行 -- Unity游戏开发领域优质博主 5337

unity code 更新gpuinstance数据

添加数据: 在MaterialPropertyBlock.cpp中有AddPropertyTexture,AddPropertyFloat以及ReplacePropertyTexture,ReplacePropertyColor等可以更改m_Buffer这个dynamic_array<float>类型的数据,以及m_Properties这个dynamic_array<Property>类型的数据。 Property里面是这些数据。 设置指令: 在GfxDev.

llsansun的博客 565

Python + NX二次开发,如何配置Python的第三方库(包)?

地球人都知道python有强大的第三方库,可以各类骚操作,包括但不限于人工智能模块。在使用Python进行NX二次开发时,如果能够用得上这些第三方包,那将大大提高效率。本文详述了如何配置,实践证明:可行!

温良 1267

记一次iOS中有关UnityGfxDeviceWorker异常

前言 事情是这个样子的。12月17号那天发行方说提审的ios游戏包在苹果部分机型和系统上大概率闪退,一听这消息我彻底慌了,身为ios菜鸟+小白,我是谁我该怎么办这是当时最真实的想法。好的程序员应该学会怎么解决问题。看闪退日志,找了一些国内外的资料。终于凭自己的实践在没经过别人帮助下解决此问题。记录一下帮助遇到同样问题的同学。 问题描述 开发设备: Xcode 12.3 Unity Mac18.4.13c1 破解版本 我手里测试机有三款分别是 iPad Pro : 系统:13

北京朝阳区精神病院院长 5002

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

Android卡顿相关原理和排查工具

Android卡顿优化思考 前言 大家在平时使用手机的时候,是否遇到过我的网络明明很好,怎么一个页面半天跳转不过去,或者是,经常看到在玩王者荣耀和刺激战场时,画面都卡成ppt了,完全是ppt游戏。画面流畅度不够,掉帧特别严重。 基础知识 造成卡顿的原因可能有千百种,不过最终都会反映到 CPU 时间上。我们可以把 CPU 时间分为两种:用户时间和系统时间。 。用户时间就是执行用户态应用程序代码所消耗...

soso密斯密斯的博客 2811

使用Bigemap下载地图流程

Bigemap地图下载简单流程,临时安排任务简单学习没有深入了解。

TKY666的博客 4846

自动驾驶小车DIY:树莓派+激光雷达实现DWA路径规划(从仿真到实车)

本文详细介绍了如何基于树莓派与激光雷达,从零搭建一套完整的自动驾驶小车系统,并实现DWA局部路径规划算法。内容涵盖硬件选型、ROS环境部署、DWA算法原理与仿真,以及关键的实车调试与性能优化技巧,为创客和竞赛爱好者提供了一套低成本、高可行性的自主导航解决方案。

kiwi8的博客 529

Android Cgroup深度解析:性能卡顿的底层根源与调优实战

Cgroup(控制组)是Linux内核提供的进程资源隔离与配额管理机制,其核心原理是通过层级化分组对CPU、内存、IO等系统资源实施权重分配与硬性限制。在Android中,Cgroup已深度集成至init启动流程和Zygote进程孵化链路,成为保障前台交互优先级、抑制后台干扰、实现SoC多核高效调度的技术基石。它不仅支撑surfaceflinger帧率稳定、mediaserver音视频解码流畅,更直接决定OOM Killer的杀进程逻辑与ANR响应延迟。本文聚焦Android定制化Cgroup架构——包括s

weixin_33924220的博客 517

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

从零构建高通性能模式调试工具链:开发者实战手册

本文详细介绍了如何从零构建高通性能模式调试工具链,涵盖性能模式的核心机制、自动化监控系统构建、高级调试技巧与实战案例。通过Python脚本和Perfetto工具,开发者可以高效优化CPU、GPU和内存性能,提升移动设备和嵌入式系统的响应速度与稳定性。

weixin_28285943的博客 305

《UDS协议从入门到精通》系列——图解0x85:控制DTC的设置

如何让ECU停止或恢复DTC状态位更新?有哪些注意点?图解+示例教你快速上手UDS 0x85服务!!

车载系统攻城狮 3861

vue3:最新实现腾讯人脸核身+增强版人脸核身使用方法及示例源码,Vue3如何使用腾讯云慧眼人脸核身,提供人脸核身案例、身份信息核验、活体检测与核身比对等示例代码(后端spring与thinkphp)

vue3接入腾讯人脸核身,腾讯云人脸核身Vue3+后端代码,H5人脸核身,vue3 H5如何使用腾讯人脸核身sdk,vue3+thinkphp腾讯人脸核身,Spring Boot接入腾讯云人脸核身教程,hinkphp腾讯人脸核身,vue3人脸核身插件接入流程,vue+spring boot实现腾讯人脸核身,vue3接入腾讯云【增强版人脸核身接入】,vue3 h5微信公众号网页腾讯云慧眼人脸核身,tvue3接入人脸核身SDK,vue3+typescrip+vite接入慧眼实名认证,vue3腾讯云活体人脸核身(

✅ 精选推荐文章 4119

Android游戏后台资源调度原理与GPU显存预分配机制

GPU显存预分配是现代移动操作系统实现高效图形渲染的关键底层机制,其核心在于Vulkan上下文生命周期管理与Linux内核cgroup内存控制器的协同。当某应用(如《原神》)在后台维持稳定显存占用并保活GPU上下文时,系统可跳过碎片整理,为前台游戏提供连续显存块,显著降低冷启动延迟。该机制依赖Android 13+、Vulkan API启用、显存占用可控等技术条件,广泛应用于Unity/Unreal引擎手游的性能优化场景,尤其在Adreno/Mali旗舰GPU平台上效果突出,是理解移动端图形栈调度逻辑的重要

weixin_29189377的博客 149

高频仿真:高频天线设计_(4).天线参数分析与优化

通过上述步骤,我们展示了如何综合使用解析方法、数值优化方法和实验数据来设计和优化一个高效宽带天线。首先,我们通过解析方法确定了天线的初步长度;然后,使用遗传算法优化了天线的直径以最大化增益;最后,通过实验数据验证了天线的性能,包括驻波比和带宽。这一综合性方法可以有效地提升天线的设计和优化效果,确保其在实际应用中表现出色。

2401_87715305的博客 923

关于Unity中空指针引用异常的问题

2020.11.21 在一个脚本中调用另一个脚本的方法时遇到的问题 今天,在编写敌人路线模块时,我想要在WayLine脚本中调用EnemySpawn脚本中的IndexOfTheSelectedChild方法,如下 private bool isOccupied = true; EnemySpawn es; ...

Sator1的博客 1560

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制

导语CPU和GPU是共享一份内存的吗?腾讯游戏学院专家Donald将在本文尝试以一张贴图纹理的虚拟内存占用为例,解答一些内存方面的问题。本篇主要分析iOS系统,后续会更新安卓篇。开发手机游戏时,常听到身边的人传授经验:“CPU和GPU是共享一份内存的”,但这句经验到底具体指的是什么,仿佛总得不到细节精确的回答。因此,本文尝试以一张贴图纹理的虚拟内存占用为例,就以下问题进行分析和解答:1)是否的确主存显存共享一份贴图虚拟内存?2)如果问题1证实的确只有一份,纹理虚拟内存的完整流程是怎样?Unity将该纹理文件

wubaohu1314的博客 845

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity3D 技术知识点优化归纳

使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用。不同平台和不同硬件得到的值会不一样,可以通过修改Player Setting的Stripping Level来调节大小。 Ricky:我试着修改了一下Stripping Level似乎没什么改变,感觉虽占用内存大但不会影响游戏运行。我们暂时忽略它吧(- -)! GfxClientDevice:GFX(图形加速\...

创小董 1208

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Mac平台关于UnityGfxDeviceWorker的闪退问题

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

C_change的博客 1542

Unity低级本地插件接口--Low-level Native Plugin Interface

除了本地的脚本代码,Unity的本地插件能够接收特定时间的回调。这个特性最常用被来实施低层次的插件渲染工作,使之能够和Unity的多线程渲染一起工作。 定义这些接口的头文件由编辑器提供。(什么意思,没看明白) 接口注册 一个插件应该导出UnityPluginLoad和UnityPluginUnload函数来处理unity事件。参考IUnityInterface.h来获取正确的签名(声明)。I

KinGil 4389

unity 渲染性能分析工具

既然要优化,肯定要有个目标:pc上一般要求:一秒渲染60帧移动端:一秒渲染30帧这应该是最低的要求,如果游戏运行时,游戏帧率有变化,人眼能够明显的感觉到帧率下降。优化的首要规则是找到性能问题的所在。一般出现问题不是在cpu就是gpu。

现在学习也不晚 4208

性能分析工具Systrace的使用详解

systrace

QG 3164

Unity3D项目Android平台打包时出现65535方法过多的问题

背景:项目需求,要接入友盟SDK,我下载好友盟的package包,导入,运行,一套操作行云流水,却出现了65535问题。 出现这种问题,其实很好解决,不用导出Android工程,下面几个步骤也能帮你很快解决:1、修...

zq1142995334的博客 815
上一篇: Android系统功耗优化之Alarm - 从AlarmManager到Linux kernel
下一篇: [Android] 编译出现 xxx is not clean, please run 'make mrproper'
DecJ
博客等级 码龄18年 537粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值