特定Adreno GPU的Android设备发生冻屏问题

1)特定Adreno GPU的Android设备发生冻屏问题
​2)Unity版本升级后,iOS加载UnityFramework bundle闪退
3)关于RectTransfrom.rect在屏幕空间中表示的相关问题
4)Unity Mesh泄露问题


这是第345篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

Rendering

Q:遇到了特定Android设备上【Adreno】发生冻屏(GPU挂起)的问题。

现象是屏幕冻住,不刷新了,但是音乐,点击UI的音效还可以播放。用Unity Profiler看CPU,也没异常也不闪退。以下是冻屏时抓到的错误日志,麻烦大家帮看下有什么启发,谢谢!

01-30 11:03:42.760 17569 19804 W Adreno-GSL: lddcontrol:549>: ioctl fd 90 code 0xc040094a (IOCTLKGSLGPU_COMMAND) failed: errno 71 Protocol error

01-30 11:03:42.760 17569 19804 W Adreno-GSL: gpusnapshot:458>: panel.gpuSnapshotPath is not set.not generating user snapshot

01-30 11:03:42.819 823 19810 I sensors-hal: handlesnsstdsensorevent:542,  [0][4698] A(3) [ 0.041,-0.038,10.005] 2034014965228

01-30 11:03:42.829 823 19041 I sensors-hal: handlesnsstdsensorevent:88, LCCT:[307, 307, 160, 33, 307, 147, 2, 0, 0, 11]

01-30 11:03:42.883 3402 3835 D SDHMS:com.sec.android.sdhms.thermal.siop.B: SIOP:: AP:373(570,110) BAT:331(331,0) CHG:291(442,100) USB:335(335,0) WIFI:319(382,50) PA:340(409,50) BLK:0(0,0) SUBBAT:0(0,0) LRP:357(357,0) LRF:350(350) LRB:357(357)

01-30 11:03:42.958 18930 18962 E FirebaseInstanceId: Token retrieval failed without exception message. Will retry token retrieval

01-30 11:03:43.105 1161 1864 D PowerManagerService: [api] userActivityFromNative : 180 (event: 2 flags: 0) eventTime = 2034309

01-30 11:03:43.224 17569 19804 W Adreno-GSL: lddcontrol:549>: ioctl fd 90 code 0xc040094a (IOCTLKGSLGPU_COMMAND) failed: errno 35 Resource deadlock would occur

01-30 11:03:43.224 17569 19804 W Adreno-GSL: gpusnapshot:458>: panel.gpuSnapshotPath is not set.not generating user snapshot

01-30 11:03:43.243 17569 19804 E Unity : allocation 0x0xc000000000000001 already registered @ /Users/builduser/buildslave/unity/build/Runtime/GfxDevice/opengles/DataBuffersGLES.cpp:l234 size 4096; now calling from /Users/builduser/buildslave/unity/build/Runtime/GfxDevice/opengles/DataBuffersGLES.cpp:l234 size 65536?

A1:刚刚修复了这个问题,希望帮助到还有类似问题的人。

我尝试了关闭Unity的Multitreaded Rendering无效,仍然报错。

后来发现可能跟相机的Renderer有关,我的一个场景中的相机的Rendering-Renderer用的是2D Renderer data,把它换成URP asset后,关闭了Render shadows,卡死问题没有再出现了。

感谢华仔咯@UWA问答社区提供了回答

A2:我也遇到了,尝试关闭多线程渲染, 就不再复现。

感谢fly@UWA问答社区提供了回答

A3:感觉是Jobs加速GPU导致问题,我们在设置中关闭GraphicsJobs,问题就解决了。

感谢刘强@UWA问答社区提供了回答


Platform

Q:Unity从18升级到2020.3版本,iOS加载UnityFramework Bundle闪退。

正常通过Xcode编译都能进入,但是通过点击APP黑屏10秒左右就闪退了,后面通过写文件定位到 [bundle load]完之后就没有后续的内容了,UnityFramework的大小是150MB,后面我有通过了解,iOS在main函数之前执行太长就会直接崩掉?这个Framework是可以减少体积的吗?还是有其他接近方式?

以下是代码:

UnityFramework* UnityFrameworkLoad()
{
    NSString* bundlePath = nil;
    bundlePath = [[NSBundle mainBundle] bundlePath];
    bundlePath = [bundlePath stringByAppendingString: @"/Frameworks/UnityFramework.framework"];

    NSBundle* bundle = [NSBundle bundleWithPath: bundlePath];

    if ([bundle isLoaded] == false) [bundle load];

    UnityFramework* ufw = [bundle.principalClass getInstance];

    if (![ufw appController])
    {
        // Initialize Unity for a first time
        [ufw setExecuteHeader: &_mh_execute_header];       
        // Keep in sync with Data folder Target Membership setting
        [ufw setDataBundleId: "com.unity3d.framework"];      
    }

    return ufw;

}

A:出现过楼主的问题,后来发现项目中有用到Uniweb,只要把libuniweb.a加到主工程里面就解决了。

感谢todd@UWA问答社区提供了回答


UI

Q:最近在做一个截屏相关的需求,需要对屏幕某个区域进行截屏。

沿用项目组现在的做法,就是先全屏截,然后根据UI上某个结点的RectTransform来划定一个截屏区域,最后通过Texture.ReadPixels来读取RectTransform划定区域的像素。这其中涉及到的就是RectTransform.rect对应区域在屏幕空间中的表示。

现在的做法就是先将RectTransform从世界坐标转换到屏幕空间,将RectTransform.position根据UICamera走WorldToScreenPoint算出Rect在屏幕空间的中心点centerScreenPos,然后根据RectTransform和canvas.scaleFactor来算出RectTransform.rect在屏幕空间中的起点以及长宽,最后得出需要ReadPixels的区域Rect。

不解的是,以上做法,在真机和模拟器都能正常工作,但是在Editor上截出来的区域就会有一个偏移,经过测试发现这个偏移值来自于RectTransform的localPosition,也就是图中的PosY:

只要上面的PosY不为0,在Editor截出来的图就是有偏移,各个分辨率都会有问题。在Editor下特殊处理一下,减去这个偏移值,所得出来的效果就和真机、模拟器一致了。

所以想问一下,是我上述的做法不对吗?

附上网上别人的做法:Get Rect in Screen Space from RectTransform (Screen Space - Camera),最后算出来的值和我的做法是一样的,但是还是在Editor有一个localPosition的偏移,在真机/模拟器就没有问题。

A:原因可能是transform.GetWorldCorners(worldCorners)函数有时序问题,导致获取的值不正确,应该自行计算Rect的顶点在屏幕空间的坐标:

Transform ownSpace = gui.transform;
Rect rectInOwnSpace = gui.rect;

var p0 = ownSpace.TransformPoint(new Vector3(rectInOwnSpace.x, rectInOwnSpace.y, 0f));
var p1 = ownSpace.TransformPoint(new Vector3(rectInOwnSpace.xMax, rectInOwnSpace.yMax, 0f));
var minCorner = hudCamera.WorldToScreenPoint(p0);    // 左下角坐标
var maxCorner = hudCamera.WorldToScreenPoint(p1);   // 右上角坐标

另外,ReadPixels函数性能过低(GPU到CPU),建议考虑使用Graphics.CopyTexture函数(GPU到GPU)。

感谢LittleCat@UWA问答社区提供了回答


Memory

Q:我发现我们的游戏进入战斗后,再退出战斗场景,模型的Mesh对象泄露了,等待了很久也不能回收。已经触发调用过Resource.UnloadUnusedAssets()。Profile上提示被一个Scene Object()引用。但我没找到有过这个东西,完全不知道是什么。大家帮我看一看吧,谢谢了。

A:建议写个工具检查下当前场景内有没有仍在使用该Mesh对象的物体。

感谢Knight-132872@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/48820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】2050. 并行课程 III

【每日一题】2050. 并行课程 III 2050. 并行课程 III题目描述解题思路 2050. 并行课程 III 题目描述 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 relations[j] [prevCoursej, nextCour…

Linux安装部署Nacos和sentinel

1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…

yo!这里是STL::string类简单模拟实现

目录 前言 常见接口模拟实现 默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 迭代器 简单接口 1.size() 2.c_str() 3.clear() 操作符、运算符重载 1.操作符[] 2.运算符 3.运算符> 扩容接口 1.reserve() 2.resize() 增删查改接口 …

【数字IC基础】竞争与冒险

竞争-冒险 1. 基本概念2. 冒险的分类3. 静态冒险产生的判断4. 毛刺的消除使用同步电路使用格雷码增加滤波电容增加冗余项,消除逻辑冒险引入选通脉冲 1. 基本概念 示例一: 如上图所示的这个电路,使用了两个逻辑门,一个非门和一个与…

mybatis-spring

简介 通过简化实现流程,把MyBatis的最核心的内容展示出 mybatis的加载过程 执行流程 类图 核心流程 public class ApiTest {Testpublic void test_queryUserInfoById() {String resource "mybatis-config-datasource.xml";Reader reader;try {reader…

工业平板电脑优化汽车工厂的生产流程

汽车行业一直是自动化机器人系统的早期应用领域之一。通过使用具有高负载能力和远程作用的大型机械臂,汽车装配工厂可以实现点焊、安装挡风玻璃、安装车轮等工作,而较小的机械手则用于焊接和安装子组件。使用机器人系统不仅提高了生产效率,还…

STM32+FPGA的导常振动信号采集存储系统

摘 要 : 针 对 工 厂 重 要 设 备 运 输 途 中 可 能 损 坏 的情 况 , 本 文 设计 了一 套 采 用 STM32F103+F&#xff3…

nginx mirror代码分析

实现方式 mirror逻辑的工作阶段: ngx在log phase之后(在ngx_http_free_request处调用)已完成向client端返回response,在log phase之后完成close connection(短链接),在该阶段处理mirror逻辑不…

Godot 4 源码分析 - 获取属性信息

在管道通信基础上,可进行宿主程序与Godot的双向通信。 先拿属性信息试试手。 DrGraph端 static UnicodeString command "Book.position"; if (InputQuery("输入窗口", "请输入待获取的属性信息", command)) {TDrStream_Get drGet…

Vue2.x和Vue3.x面试常问知识点-面试题

SPA单页面的理解,它的优缺点分别是什么? 是什么 SPA( single page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。 一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转 而…

数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)

目录 算法概述 物理排序 复杂度分析 算法概述 表排序用于 待排元素都为一个庞大的结构,而不是一个简单的数字,例如:一本书,一部电影等等。 如果这些待排元素都用之前的排序方法,元素需要频繁互换,那么…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中,大家总是奔波于家和公司之间。大部分时间用于工作中,也就很难及时知晓家中的动态情况,对于家中有老人、小孩或宠物的(甚至对居住环境安全不放心的),这已然是…

01)docker学习 centos7离线安装docker

docker学习 centos7离线安装docker 在实操前可以先看下docker教程,https://www.runoob.com/docker/docker-tutorial.html , 不过教程上都是在线安装方式,很方便,离线安装肯定比如在线麻烦点。 一、什么是Docker 在学习docker时,在网上看到一篇博文讲得很好,自己总结一下…

NAT协议(网络地址转换协议)详解

NAT协议(网络地址转换协议)详解 为什么需要NATNAT的实现方式静态NAT动态NATNAPT NAT技术的优缺点优点缺点 NAT协议是将IP数据报头中的IP地址转换为另外一个IP地址的过程,主要用于实现私有网络访问公有网络的功能。这种通过使用少量的IP地址代…

一百三十三、Hive——Hive外部表加载含有JSON格式字段的CSV文件数据

一、目标 在Hive的ODS层建外部表,然后加载HDFS中的CSV文件数据 注意:CSV文件中含有未解析的JSON格式的字段数据,并且JSON字段中还有逗号 二、第一次建外部表,直接以,分隔行字段,结果JSON数据只显示一部分…

(树) 剑指 Offer 07. 重建二叉树 ——【Leetcode每日一题】

❓剑指 Offer 07. 重建二叉树 难度:中等 输入某二叉树的 前序遍历 和 中序遍历 的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] …

[NLP]Huggingface模型/数据文件下载方法

问题描述 作为一名自然语言处理算法人员,hugging face开源的transformers包在日常的使用十分频繁。在使用过程中,每次使用新模型的时候都需要进行下载。如果训练用的服务器有网,那么可以通过调用from_pretrained方法直接下载模型。但是就本人…

5.2.tensorRT基础(2)-使用onnx解析器来读取onnx文件(源码编译)

目录 前言1. ONNX解析器2. libnvonnxparser.so3. 源代码编译4. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 t…

已解决:多线程环境中,新线程在使用cout函数打印输出到显示器出现数据混乱的情况

错误展示错误原因解决办法1. 在本问题情况下:使用printf函数替代cout:2. 使用互斥锁使 cout函数线程保持原子状态 什么是原子操作? 错误展示 最近学习多线程的时候,创建了一堆线程,然后每个线程都运行这个方法&#x…

大数据Flink(五十二):Flink中的批和流以及性能比较

文章目录 Flink中的批和流以及性能比较 ​​​​​​​​​​​​​​一、Flink中的批和流