问题标签 [surfaceflinger]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 使用 SDL 将 fb1 的内容绘制到屏幕上
我正在开发一个 Android 应用程序兼容性项目,该项目涉及让两个合成器绘制到 2 个不同的帧缓冲区,主合成器(口红,一个 Wayland 合成器)绘制到 fb0。在与 /dev/graphics/fb0 指向 fb1 的 fb 交换后,Surfaceflinger 绘制到 fb1。我想创建一个应用程序来获取 fb1 的内容并将其绘制到屏幕上,可能使用 SDL。但我不知道如何做到这一点。
android - 当设备静止但被触摸时 Android 动画的性能下降
我的应用程序每帧更改了一些非常简单的视图(旋转、平移)的属性。根据 Android 性能文章的建议,我使用 systrace 来检查我是否丢帧。
真的发生了一些意想不到的事情。当设备静止不动时(即使我触摸了屏幕)CPU 使用率更高,系统跟踪上的警报出现了,GPU 渲染分析器的红色部分更长。当我快速旋转或摇晃设备时,一切正常。
以下是结果的链接。Shake
是我真正快速旋转设备no_shake
的时候,是它被放在我桌子上的时候。
我制作了一个非常简单的测试应用程序,它使用单个翻译动画:源代码。
看看shake systrace,帧率平滑,为什么HW_VSYNC_0和HW_VSYNC_ON_0行没有数据?如何读取 CPU 频率(我在捕获跟踪时启用了该选项)。
关于这个问题,我的理论是该设备可能会降低 CPU 频率。如何在 systrace 中阅读此内容?我使用第 3 方应用程序来测试这个假设,如下所示,它是正确的。那么,我能做些什么来避免这个问题呢?
为什么设备会这样做?起初我认为该设备使用加速度计数据来了解它是否未被使用,然后它降低了 CPU 频率。但是,为了提高 CPU 频率,我必须非常努力地摇动设备。像普通人一样拿着它不会增加CPU频率。
我知道这是很多问题,但是在阅读了有关 Android 图形管道的所有相关文章后,我没有想法。
该问题出现在运行 Android 5.1 的 Sony Xperia Z3 上 该问题无法在运行 Android 6 的 Nexus 5 上重现。
更新
似乎性能问题是由 CPU/GPU 节流引起的。同样的设备,Xperia Z3,在运行 Android 4.4 时,尽管它降低了时钟速度,但根据 Systrace,它的性能更好。此外,它在摇晃时不会增加速度。
关于提高 CPU 速度所需的摇动手势,我注意到当我尝试将设备从纵向旋转到横向或反之亦然时,触发的 CPU 时钟会增加(即使应用程序没有改变方向)。所以,我认为监控这个手势的原因是为了加快可能的方向变化。
android - Android init.rc 更改surfaceflinger gid 的语句
在 android 文件系统中,init.rc 脚本具有更改或附加 Surfaceflinger 的用户和组的语句,如下所示。
顺便说一下,有趣的是用户是系统,但是组没有系统。如上脚本,组只有图形和drmrpc。
为什么没有设置系统组?
如果我出于某种原因设置了系统组。它会妥协吗?
android - 如何检测视频是否在android平台上播放?
是否有一些 api 或方法可以知道某些视频是否在 android 平台上播放?
当视频在前台播放时,我想停止一些后台工作。
api或方法最好来自surfaceflinger、window manager service等框架模块。
谢谢。
android - 在 Android 上确定准确的屏幕翻转时间
我试图确定(在 1 毫秒内)Android 上发生特定屏幕翻转的时间。每次帧翻转时,Choreographer 都会触发,但无法确定实际显示的是哪一帧。根据https://source.android.com/devices/graphics/architecture.html,这个过程有好几层:用户登陆缓冲区,它翻转到一个三缓冲队列,它翻转到表面flinger,它翻转到硬件。这些层中的每一层都可能会丢帧,但此时我只确定了如何监控用户空间缓冲区。有没有办法监控其他缓冲区/翻转(实时,在无根、非自定义手机上)?
我在 HTC M8 上观察到了意外的帧延迟(大约每 5 分钟 1 次),但 Nexus 7 似乎没有这个问题。我使用带有照片传感器和实验室流层 ( https://github.com/sccn/labstreaminglayer ) 的 Cedrus StimTracker ( http://cedrus.com/stimtracker/ )来测量延迟。我尝试使用 eglPresentationTimeANDROID 来控制何时翻转屏幕,但这并没有解决问题。
请注意,我使用的是 ndk,但我通常可以在需要时使用 JNI 来访问非 ndk 功能。
我关心的原因是为了将 Android 用于心理和神经学实验,其中 1 毫秒的精度是非常可取的。
android - Android UI 在不同的显示硬件下表现不同
当我连接1366 X 768 lvds 显示器时,我的 android 设备的行为异常。用户界面与我连接 HDMI 时得到的不同。我得到了一个带有其他壁纸的不同主屏幕,而且底部的导航键不见了。
看起来 UI 是根据硬件显示配置来配置的。
有没有办法覆盖这种行为?请提出一些解决这个问题的方法..
安卓版本:棒棒糖5.0.1
android - Android Surface Flinger 测试程序:调整大小
当我在 aosp(marshmallow - 6.0.1) 文件夹“frameworks/native/services/surfaceflinger/tests/resize”中编译(mm)SurfaceFlinger 测试程序“resize”。
我收到以下错误。
帮我。
frame-rate - 我使用virtualDisplay在Android手机上镜像屏幕,如何将帧率更改为90?
我使用virtualDisplay在Android手机上镜像屏幕,如何将帧率更改为90?
我想也许我应该修改surfaceflinger或其他地方的代码,但我不知道,我需要帮助,谢谢!!!
android - 为什么 Layer::drawWithOpenGL 从未被调用?
我试图更好地理解 Android 渲染代码。所以我在 Layer::drawWithOpenGL() 函数中添加了一些日志记录,它是 SurfaceFlinger 的一部分。但它似乎永远不会被调用。有人可以解释为什么会这样吗?
谢谢。
android - 为 Android x86 Nougat 上的虚拟帧缓冲区分配缓冲区内存时,SurfaceFlinger/gralloc Out of Memory 错误
我们正在定制一个 Android x86 Nougat (Android v7.1) 项目的分支。因为我们的系统中没有视频显示硬件,所以我们尝试设置虚拟帧缓冲区 (VFB),以便我们可以以自定义方式处理视频显示(例如,通过 VNC 服务器路由视频显示等)。
我们在系统启动时 SurfaceError 尝试初始化它,当它尝试使用 gralloc 分配内存时失败。以下是 logcat 的摘录:
以下是完整日志的链接:
初始化日志(dmesg): http: //pastebin.com/sr1rAK43
日志猫: http ://pastebin.com/SVYhvgu5
我们为使事情正常运行所做的工作:
在 kernel/arch/x86/configs/android-x86_defconfig 中设置选项: CONFIG_FB_VIRTUAL 为 M 用于 VFB 模块模式</p>
在 kernel/drivers/video/fbdev/vfb.c 更新帧缓冲区大小至 64MB:#define VIDEOMEMSIZE (64*1024*1024) </p>
在 device/generic/common/init.sh 我启动 VFB 并禁用 UVESA 帧缓冲:
函数 do_init()
# init_hal_gralloc
modprobe vfb vfb_enable=1 </p>
在“return 0”之前的文件末尾的同一个 init.sh 中:
/system/bin/fbset 360 480 20 </p>
我想知道:
1)如何解决内存不足错误?
2) 如何从内核命令行启用 vfb?</p>
3) 在让 VFB 在 Android 7.x 中的内核 4.4 上工作时我可能错过的任何配置/设置