问题标签 [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 投票
1 回答
927 浏览

android - 在 systrace 中获取 BufferQueue 状态

我试图更好地了解我的应用程序如何与 Android 的缓冲系统交互。具体来说,我想在将帧添加到 SurfaceFlinger 的 BufferQueue 时针对 Vsync 信号进行优化。

我了解在使用 SurfaceViews 时,BufferQueue 信息包含在其中:

如果我使用的是 TextureView 怎么办?在这些情况下没有 SurfaceView 计数器。不使用 SurfaceView 时是否还有其他缓冲区状态指标?应用程序计数器是否也表示 BufferQueue 状态?

BufferQueueProducer.cpp 和 BufferQueueConsumer.cpp 中的以下行似乎暗示了这一点,但如果可能的话,我可以使用信任投票:

0 投票
1 回答
10745 浏览

android - Understanding necessity of Android VSYNC signals

I'm trying to get a better understanding of the Android display subsystem, but one item that's still confusing to me is how VSYNC signals are handled, and why so many exist in the first place.

Android is designed to use VSYNC at its core, but there are multiple VSYNC signals that it employs. Via https://source.android.com/devices/graphics/implement.html in the "VSYNC Offset" section, there is a flow diagram which diagrams three VSYNC signals: HW_VSYNC_0, VSYNC, and SF-VSYNC. I understand that HW_VSYNC is used to update the timing in DispSync, and that VSYNC and SF-VSYNC are used by the apps and surfaceflinger, but why are these individual signals necessary at all? Furthermore, how do the offsets impact these signals? Is there a timing diagram available anywhere which better explains this?

Thanks for any help you can offer.

0 投票
1 回答
496 浏览

android - Android systrace/atrace 缺少事件,跟踪中的不可能状态

我目前在 Android 上使用 atrace 来记录和分析视频工作负载期间操作系统的状态。具体来说,我在整个执行过程中监控系统的 BufferQueue 大小。atrace 记录这些缓冲区的大小,因为它们随着时间的推移排队/获取。

然而,在我的一些痕迹中,这导致了不可能的情况。C|171|SurfaceView|x 行将“x”表示为缓冲区中排队的纹理数量。例如,有时在一次获取期间,会删除两个缓冲区而不是一个(这应该是不可能的):

0 投票
1 回答
441 浏览

java - 从纵向切换到横向时出错

我的 Android 应用程序很简单。它只有 1 个活动。我为同一个活动创建了两种布局:一种用于纵向位置(在res/layout文件夹内),另一种用于横向位置(在res/layout-land文件夹内)。我在这个问题的末尾给出了两者的代码。

我在myActivity.java文件中没有什么特别之处,我只是扩展了布局:

此时一切正常。如果我将设备放在纵向位置,应用程序将调用相应的 XML。它也像一个魅力,以防我决定把它放在风景位置。

当我决定在前面提到的myActivity.java文件中添加一点代码时,问题就出现了;它仍然很简单!

在实现了那个小代码之后,如果我决定去 Landscape,应用程序会突然停止说“不幸的是 myApp 已停止”。有趣的是,如果我不实现 onClickListener,这将不会发生!

LogCat 给出的确切错误如下所示:

不要认为布局 XML 文件对我的问题有太大作用,但我会将它们复制并粘贴到此链接(用于纵向)此其他链接(用于横向)中,以免使这个问题过长。

提前致谢!

0 投票
0 回答
2743 浏览

android - 如何在Android(ADB Shell,Source)中杀死/启动SurfaceFlinger服务?

安卓开发者!!我有一个关于 SurfaceFlinger 的问题。我是一名安卓电视开发人员。我想在没有 Launcher 的情况下启动电视应用程序。但问题是 Launcher 是 GMS。所以我不能修改这个。我无法更改此方案以将 Launcher 执行到 TV 应用程序。所以我有一个窍门。我认为首先禁用 surfaceFlinger 服务,因为 Launcher 没有显示给用户。之后,启动 TV 应用,启用 surfaceFlinger 服务。但是不知道能不能控制surfaceFlinger Service。你能给我建议吗?谢谢!

0 投票
1 回答
1852 浏览

android - Android Surfaceflinger 和 openGL ES

我有几个关于 SurfaceFlinger 的问题:

1)我知道应用程序会写入 Surface 本身,然后将缓冲区移动到 SurfaceFlinger(假设我使用的是硬件画布或 EGL)。缓冲区里面是什么?原始像素?编译的openGL代码?缓冲区可以在一个事务上保存像素,在另一个事务上保存另一种类型的数据吗?

2) 我在某处读到 SurfaceFlinger 使用 OpenGL ES 1.0 API 写入 HWC/DisplayController 命令。真的吗?

如果是,那么 3.0 版命令如何转换为 1.0 版命令,在哪里?

谢谢

0 投票
0 回答
1316 浏览

android - 在 android 中更改 SurfaceFlinger 源

我正在研究Android中的图形系统。我想要做的是改变Android显示的上下侧。

它像是:

上:1 -> 2

更低:2 -> 1

为此,我研究了surfaceflinger源代码。

我注意到surfaceflinger负责组合所有图层并重新绘制它们并将图层提供给HWComposer。

所以我在Layer.cpp中看到Layer->draw source来改变上像素数据和下像素数据。但是我找不到可以更改像素数据的正确位置。

我正在使用 odroid u3 平台进行测试。odroid 中的 Android 使用三星 slsi 代码。

大佬们,我应该看哪一部分来改变上下侧?如何以像素为单位控制显示?

0 投票
0 回答
1223 浏览

android - 我无法接收所有服务器响应

在我的 Android 应用程序中,我连接到服务器并在应用程序运行时不断从服务器接收数据,一切都运行良好,但最近没有任何代码更改,我的应用程序不断丢失大量数据和没有从服务器接收到它,而是我收到了许多以BufferQueueand为中心的以下日志消息SurfaceFlinger

0 投票
1 回答
307 浏览

android - NEXUS 5 棒棒糖 5.1 SurfaceFlinger 错误

你好呀?有一个问题。nexus5 lollipop5.1 的问题。surfaceflinger 有一个代码是用来响应 ScreenshotClient 更新中使用的设备屏幕信息的。代码如下所示。

以上代码,在其他棒棒糖版本中运行正常。当然,nexus7同版本也运行正常。但是,nexus5 的变化。我的代码要参考,但继续代码循环是。而且因为你试图继续屏幕。首先我在nexus5中的代码运行正常。但是,当达到一定计数时,更新不会出现在另一个屏幕下以返回错误。更多的 ...!完成我的代码后,重新运行,在另一口井之后,当涉及到一定数量时,也会出现同样的现象。如果你有能力谁知道这件事?

我很抱歉它的英语不太好。

0 投票
1 回答
917 浏览

android - Android中APP和surfaceflinger之间的OpenGL上下文

到目前为止,据我所知,surfaceflinger 将表面提供给 APP 进行渲染,然后将所有表面合成到最终屏幕。(如有错误,请指出Thx)。

第一个问题:surfaceflinger 创建的表面是否是全局可用的,可以被所有进程使用。(表面的内存在GPU内存中吗?)

虽然我在谷歌上搜索,但无法在进程之间共享 openGL 上下文(这里我指的是 APP 进程和 surfaceflinger 进程)。我不确定表面使用的GPU内存是否如此?

如果我的第一个问题的答案是肯定的,那么当 APP 渲染到表面时,是否有任何 openGL 资源共享给 surfaceflinger?这些碎片,包括表面的记忆是如何工作的?