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

news2024/9/26 3:23:32

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flex布局篇——justify-cont:center/space-between/space-around最后一行靠左

正常来说,用到 justify-cont:space-between时,最后一行元素是这样的 会向两端对齐。为了解决这个办法,可用gap与伪类进行纠正: <view class="box"><view class="bbox" wx:for="{{50}}" wx:key="this"><view class=…

CitHub Copilot 基于GPT的代码生成模型

CitHub Copilot 基于GPT的代码生成模型 介绍 GitHub Copilot X 是 GitHub 与 OpenAI 合作创建的&#xff0c;这是世界上第一个使用 OpenAI Codex 模型开发的大规模生成式人工智能开发工具&#xff0c;可以作为vscode 和jetbrains 插件安装 价格 试用30天免费&#xff0c;10…

3分钟学会设计模式 -- 单例模式

►单例模式 ►使用场景 在编写软件时&#xff0c;对于某些类来说&#xff0c;只有一个实例很重要。例如&#xff0c;一个系统中可以存在多个打印任务&#xff0c;但是只能有一个正在工作的任务&#xff1b;一个系统中可以多次查询数据库&#xff0c;但是只需要一个连接&#x…

rancher平台上强制删除pod服务操作

背景&#xff1a; 在日常paas平台运维工作中需要对rancher平台进行巡检的工作&#xff0c;在巡检时发现在rancher管理界面无法删除异常的pod服务&#xff0c; 处理&#xff1a; 像这样的情况就是k8s集群的pod无法通过默认的方式去删除掉pod服务&#xff0c;这时候只能是手工强制…

24岁女神 上位机还是前端?何去何从?

首先&#xff0c;我要澄清一点&#xff0c;无论是上位机开发还是前端开发&#xff0c;性别并不应该是决定因素&#xff0c;而是应该根据个人的兴趣、能力和适应性来选择职业方向。在工控行业和物联网行业&#xff0c;上位机开发确实有一定的需求。由于上位机开发更注重逻辑和抽…

前端特效必备!打造酷炫马赛克和灰色滤镜,让你的图片变得与众不同!

一、引言 引言&#xff1a; 在现代前端开发中&#xff0c;图像处理是一个不可忽视的重要环节。本篇博客将带您领略前端图像处理的魅力&#xff0c;通过Canvas和算法实现几个炫酷特效&#xff1a;马赛克和灰色滤镜、模糊等。让我们一起给图片增添马赛克的神秘感和灰色滤镜的怀旧…

BMapGL -- 生成多个maker,获取指定标识的maker,并清除他们

需求描述: 在使用 Baidu Map JavaScript API 创建多个标记时,可以为每个标记设置一个唯一的标识符(identifier),以便在以后可以根据标识符获取特定的标记,并清除它们。 代码: // 创建地图实例 var map = new BMapGL.Map("container");// 创建标记1 var poin…

与传统透明屏相比,BOE透明屏有哪些特点优势?

BOE透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达90%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业展示、智能家居、汽车行业等&#xff0c;具有广阔的市场前景。 BOE透明屏采用了先进的光学技术&#xff0c;通过控制光的传播和折射&#xff…

python核心-面向对象-python对象的生命周期,以及周期方法

监听对象的生命周期 # -----------------------------几个监听对象生命周期的方法---------------------- # class Person: # # def __new__(cls, *args, **kwargs): # # print("新建一个对象&#xff0c;但是被我拦截了") # def __init__(self): # …

Spring-ApplictionContext

Spring Spring是整个Java体系最核心的框架&#xff0c;没有之一。 核心类图结构 ApplicationContext ApplicationEventPublisher&#xff1a;提供了一种机制&#xff0c;用于通知应用程序中感兴趣的部分有关其执行过程中发生的特定事件。ListableBeanFactory&#xff1a;是S…

vue新学习 02 vue命令v-model,数据代理,事件,监听,渲染

双向绑定用命令v-model&#xff1a; v-bind的命令是单项去绑定data中的相关属性&#xff0c;此时的data是真正的data&#xff0c;并没有用变量声明的方式去接收vue实例对象&#xff0c;也就是例如用const vm new Vue({})。而是直接就采用了new Vue&#xff08;{}&#xff09;这…

【DP】The 2022 ICPC Asia Regionals Online Contest (II) B Non-decreasing Array

PTA | 程序设计类实验辅助教学平台 题意&#xff1a; 给定一个不下降的序列&#xff0c;每次操作有两步&#xff1a; 1.选择2~N的一个数&#xff0c;删除这个数 2.选择2~N的一个数&#xff0c;改变这个数为任意值 要满足该数列不下降&#xff0c;N-2次询问&#xff0c;问操…

《玉骨遥》:腾讯视频定义古偶叙事及格线

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文 | 螳螂观察 作者 | 郭襄 拿着自带话题与流量的古偶仙侠剧《玉骨遥》&#xff0c;腾讯视频着实做了一回暑期档的“显眼包”。 对于长视频平台来说&#xff0c;暑期档是兵家必争之地。但在一众竞争者中&#xff0…

3.操作元素内容

3.1元素innerText属性 ➢将文本内容 添加/更新到任意标签位置 ➢显示纯文本&#xff0c;不解析标签 【例如】 <body><div class"box">文字内容</div><script>// 1.获取元素const box document.querySelector(.box)// 2.修改文字内容 对象…

完全背包--动态规划

一)模板题:完全背包 【模板】完全背包_牛客题霸_牛客网 (nowcoder.com) 第一问: 一)定义一个状态表示: dp[i][j]表示从前i个物品中选&#xff0c;总体积不超过j&#xff0c;所有选法中&#xff0c;最大的价值 二)根据状态标识推到状态转移方程:根据最后一个位置的状态来划分问…

配置tomcat内存大小(windows、linux)

一、参数说明 -Xms&#xff1a; JVM初始分配的堆内存 -Xmx&#xff1a; JVM最大允许分配的堆内存&#xff0c;按需分配 -XX:PermSize&#xff1a; JVM初始分配的非堆内存 -XX:MaxPermSize&#xff1a; JVM最…

华为openGauss数据库入门 - gsql用法

目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…

flask部署钉钉机器人和企业微信机器人

引言 创建机器人&#xff0c;目的是通过机器人的方式&#xff0c;提出用户的问题&#xff0c;得到想要的回答 钉钉机器人 首先我们需要获取钉钉的企业内部开发者权限然后我们进入钉钉开放平台,登陆后&#xff0c;选择应用开发->机器人->创建应用&#xff0c;我创建了一…

用HTML写一个简单的静态购物网站

实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>购物网站</title> &l…