surfaceflinger

How to make sense of dumpsys SurfaceFlinger

给你一囗甜甜゛ 提交于 2019-11-30 07:30:30
Is there any documentation on the output of the adb command "dumpsys SurfaceFlinger"? In particular, I'd like to understand what is the difference between an HWC or GLES layer type, and what does numHwLayers mean? Here is the section of dumpsys SurfaceFlinger I'm talking about: mDebugForceFakeVSync=0 Display[0] : 768x1280, xdpi=319.790009, ydpi=318.744995, refresh=16666667 numHwLayers=5, flags=00000000 type | handle | hints | flags | tr | blend | format | source crop | frame name ------------+----------+----------+----------+----+-------+----------+---------------------------+-----------------

Android Surface-GraphicBuffer-BufferQueue

放肆的年华 提交于 2019-11-28 22:25:30
Android的UI控件最终在Surface上进行绘制;Surface要进行绘制,需要申请显存,绘制,提交显存进行显示。 申请显存 Android的显存由两个部分表示,对APP的接口体现为Surface(native/libs/gui/Surface.cpp),对graphics部分(CPU/GPU/OPENGL)体现为GraphicBuffer。 Surface说明 Surface本身有两个含义,一个是代表UI系统的Canvas,另一个是代表本地window系统,为跨平台的OPENGL(EGL)提供接口。 UI一般基于Canvas绘制,参考UI的始祖View的draw函数: public void draw(Canvas canvas) 所有UI控件继承自View,都会基于Canvs来绘制自己;UI组件的draw是谁触发的,canvas是怎么创建的?这些秘密在ViewRootImpl里面,每个Activity在setContentView之后,系统会为其创建一个ViewRootImpl对象,该对象代替Activity管理其view系统,并和window系统建立关联(Activity的window就是在该类中创建的),并且ViewRootImpl会建立和SurfaceFlinger的连接,监听SurfaceFlinger的VSYNC信号,一旦VSYNC信号发生

SurfaceView创建Surface的过程

风流意气都作罢 提交于 2019-11-27 08:39:03
在分析SurfaceView如何创建Surface之前需要先了解下SurfaceFlinger的知识, 几篇好文章 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系 AndroidO 图形框架下应用绘图过程——Surface创建 Android8.0 帧缓冲硬件抽象层 Android P 图形显示系统 Android SurfaceView原理分析 SurfaceView在显示时,会调用 onWindowVisibilityChanged 方法,详细流程请参考 Android SurfaceView原理分析 //frameworks\base\core\java\android\view\SurfaceView.java @Override protected void onWindowVisibilityChanged ( int visibility ) { super . onWindowVisibilityChanged ( visibility ) ; mWindowVisibility = visibility == VISIBLE ; updateRequestedVisibility ( ) ; //创建surface入口 updateSurface ( ) ; } 接着分析下 updateSurface /**

Android图形系统分析与移植--四、Surface Manager(Surface Flinger简介)

╄→гoц情女王★ 提交于 2019-11-27 08:38:15
Surface Manager是用户空间中framework下libraries中负责显示相关的一个模块,当系统同时执行多个应用程序时,SurfaceManager会负责管理显示与存取操作间的互动,另外也负责将2D绘图与3D绘图进行显示上的合成。 1、Surface manager架构分析 Android中的图形系统采用Client/Server架构,如下: Client端:应用程序相关部分。代码分为两部分,一部分是由Java提供的供应用使用的api,另一部分则是由c++写成的底层实现。 Server端:即SurfaceFlinger,负责合成并送入buffer显示。其主要由c++代码编写而成。 Client和Server之前通过Binder的IPC方式进行通信,总体结构图如图1所示: 如上图所示,Surface的client部分其实是提供给各应用程序进行画图操作的一个桥梁,该桥梁通过binder通向server端的Surfaceflinger,Surfaceflinger负责合成各个surface,然后把buffer传送到FrameBuffer端进行底层显示。其中每个surface对应2个buffer,一个frontbuffer, 一个back buffer,更新时,数据更新在back buffer上,需要显示时,则将back buffer和front buffer互换。

Android系统Surface机制的SurfaceFlinger服务的启动过程分析

落花浮王杯 提交于 2019-11-27 08:37:16
分享一下我老师大神的人工智能教程!零基础,通俗易懂! http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 在前面一篇文章中,我们简要介绍了 Android 系统 Surface 机制中的 SurfaceFlinger 服务。 SurfaceFlinger 服务是在 System 进程中启动的,并且负责统一管理设备的帧缓冲区。 SurfaceFlinger 服务在启动的过程中,会创建两个线程,其中一个线程用来监控控制台事件,而另外一个线程用来渲染系统的 UI 。在本文中,我们就将详细分析 SurfaceFlinger 服务的启动过程。 《Android系统源代码情景分析》一书正在进击的程序员网( http://0xcc0xcd.com )中连载,点击进入! 从前面 Android系统进程Zygote启动过程的源代码分析 一文可以知道, System 进程是由Zygote进程启动的,并且是以Java层的SystemServer类的静态成员函数main为入口函数的。因此,接下来我们就从SystemServer类的静态成员函数main开始,分析 SurfaceFlinger 服务的启动过程,如图1所示。 图1 SurfaceFlinger服务的启动过程 SurfaceFlinger

Android6.0 显示系统(一) Surface创建

元气小坏坏 提交于 2019-11-27 08:36:28
之前在分析Activity的时候,我们分析过Surface创建。这个系列的博客是讲述显示系统,这里再系统的分析下Surface创建过程。 之前我们分析在Activity在调用attach方法时,建立ViewRootImpl,以及创建其Surface过程,还有在WMS中创建Surface的过程。 这篇博客我们通过另外一个方式分析,但是其实质是一样的。 一、应用层创建Surface 应用开发中很少直接使用Surface,因为每个Activity中已经创建好了各自的Surface对象(就是之前博客分析的在ViewRootImpl通过WMS创建的),通常只有一些特殊应用才需要在Activity之外创建Surface,例如照相机、视频播放应用。通常这些应用也是通过创建SurfaceView来使用Surface。在应用中不直接创建一个可用的Surface对象,或者说直接创建出来的Surface对象也没用,因为这样的Surface不能和SurfaceFlinger之间有关联。 下面我们就来看下SurfaceView是如何创建Surface的,在SurfaceView有两个Surface一个mSurface表示正在用的,另一个mNewSurface代表我们要切换的。 final Surface mSurface = new Surface(); // Current surface in use

Android深入浅出之Surface[1]

混江龙づ霸主 提交于 2019-11-27 08:33:59
Android深入浅出之Surface 一 目的 本节的目的就是为了讲清楚Android中的Surface系统,大家耳熟能详的SurfaceFlinger到底是个什么东西,它的工作流程又是怎样的。当然,鉴于SurfaceFlinger的复杂性,我们依然将采用情景分析的办法,找到合适的切入点。 一个Activity是怎么在屏幕上显示出来的呢?我将首先把这个说清楚。 接着我们把其中的关键调用抽象在Native层,以这些函数调用为切入点来研究SurfaceFlinger。好了,开始我们的征途吧。 二 Activity是如何显示的 最初的想法就是,Activity获得一块显存,然后在上面绘图,最后交给设备去显示。这个道理是没错,但是Android的SurfaceFlinger是在System Server进程中创建的,Activity一般另有线程,这之间是如何...如何挂上关系的呢?我可以先提前告诉大家,这个过程还比较复杂。呵呵。 好吧,我们从Activity最初的启动开始。代码在 framework/base/core/java/android/app/ActivityThread.java中,这里有个函数叫handleLaunchActivity [---->ActivityThread:: handleLaunchActivity()] private final void