问题标签 [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.

0 投票
0 回答
499 浏览

android - 使用 SDL 将 fb1 的内容绘制到屏幕上

我正在开发一个 Android 应用程序兼容性项目,该项目涉及让两个合成器绘制到 2 个不同的帧缓冲区,主合成器(口红,一个 Wayland 合成器)绘制到 fb0。在与 /dev/graphics/fb0 指向 fb1 的 fb 交换后,Surfaceflinger 绘制到 fb1。我想创建一个应用程序来获取 fb1 的内容并将其绘制到屏幕上,可能使用 SDL。但我不知道如何做到这一点。

0 投票
2 回答
2010 浏览

android - 当设备静止但被触摸时 Android 动画的性能下降

我的应用程序每帧更改了一些非常简单的视图(旋转、平移)的属性。根据 Android 性能文章的建议,我使用 systrace 来检查我是否丢帧。

真的发生了一些意想不到的事情。当设备静止不动时(即使我触摸了屏幕)CPU 使用率更高,系统跟踪上的警报出现了,GPU 渲染分析器的红色部分更长。当我快速旋转或摇晃设备时,一切正常。

以下是结果的链接。Shake是我真正快速旋转设备no_shake的时候,是它被放在我桌子上的时候。

我制作了一个非常简单的测试应用程序,它使用单个翻译动画:源代码

Systrace:不摇

CPU使用率: 在此处输入图像描述

GPU 分析器: 在此处输入图像描述

看看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 时钟会增加(即使应用程序没有改变方向)。所以,我认为监控这个手势的原因是为了加快可能的方向变化

0 投票
0 回答
319 浏览

android - Android init.rc 更改surfaceflinger gid 的语句

在 android 文件系统中,init.rc 脚本具有更改或附加 Surfaceflinger 的用户和组的语句,如下所示。

顺便说一下,有趣的是用户是系统,但是组没有系统。如上脚本,组只有图形和drmrpc。

为什么没有设置系统组?

如果我出于某种原因设置了系统组。它会妥协吗?

0 投票
1 回答
458 浏览

android - 如何检测视频是否在android平台上播放?

是否有一些 api 或方法可以知道某些视频是否在 android 平台上播放?

当视频在前台播放时,我想停止一些后台工作。

api或方法最好来自surfaceflinger、window manager service等框架模块。

谢谢。

0 投票
1 回答
371 浏览

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 毫秒的精度是非常可取的。

0 投票
1 回答
121 浏览

android - Android UI 在不同的显示硬件下表现不同

当我连接1366 X 768 lvds 显示器时,我的 android 设备的行为异常。用户界面与我连接 HDMI 时得到的不同。我得到了一个带有其他壁纸的不同主屏幕,而且底部的导航键不见了。

看起来 UI 是根据硬件显示配置来配置的。

有没有办法覆盖这种行为?请提出一些解决这个问题的方法..

安卓版本:棒棒糖5.0.1

0 投票
0 回答
808 浏览

android - Android Surface Flinger 测试程序:调整大小

当我在 aosp(marshmallow - 6.0.1) 文件夹“frameworks/native/services/surfaceflinger/tests/resize”中编译(mm)SurfaceFlinger 测试程序“resize”。

我收到以下错误。

帮我。

0 投票
0 回答
247 浏览

frame-rate - 我使用virtualDisplay在Android手机上镜像屏幕,如何将帧率更改为90?

我使用virtualDisplay在Android手机上镜像屏幕,如何将帧率更改为90?

我想也许我应该修改surfaceflinger或其他地方的代码,但我不知道,我需要帮助,谢谢!!!

0 投票
1 回答
132 浏览

android - 为什么 Layer::drawWithOpenGL 从未被调用?

我试图更好地理解 Android 渲染代码。所以我在 Layer::drawWithOpenGL() 函数中添加了一些日志记录,它是 SurfaceFlinger 的一部分。但它似乎永远不会被调用。有人可以解释为什么会这样吗?

谢谢。

0 投票
0 回答
1740 浏览

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

我们为使事情正常运行所做的工作:

  1. 在 kernel/arch/x86/configs/android-x86_defconfig 中设置选项: CONFIG_FB_VIRTUAL 为 M 用于 VFB 模块模式</p>

  2. 在 kernel/drivers/video/fbdev/vfb.c 更新帧缓冲区大小至 64MB:#define VIDEOMEMSIZE (64*1024*1024) </p>

  3. 在 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 上工作时我可能错过的任何配置/设置