`

Android display架构分析(七-1)

 
阅读更多

http://hi.baidu.com/leowenj/blog/item/7abbe33a309367ff3b87ce6f.html

 

Android display架构分析(七-1)

 

 

Surfaceflinger process 流程分析

      根据前面的介绍, surfaceflinger 作为一个 server process ,上层的应用程序(作为 client )通过 Binder方 式与其进行通信。 Surfaceflinger 作为一个 thread ,这里把它分为 3 个部分,如下:

1、 Thread 本身处理部分,包括初始化以及 thread loop

2、 Binder 部分,负责接收上层应用的各个设置和命令,并反馈状态标志给上层。

3、 与底层的交互,负责调用底层接口( HAL )。

结构图如下:



 

 

注释:

a、 Binder 接收到应用程序的命令(如创建 surface 、设置参数等),传递给 flinger

b、 Flinger 完成对应命令后将相关结果状态反馈给上层。

c、 在处理上层命令过程中,根据需要设置 event (主要和显示有关),通知 Thread Loop 进行处理。

d、 Flinger 根据上层命令通知底层进行处理(主要是设置一些参数, Layer position 等)

e、 Thread Loop 中进行 surface 的合成并通知底层进行显示( Post buffer )。

f、   DisplayHardware 层根据 flinger 命令调用 HAL 进行 HW 的操作。

 

下面来具体分析一些 SurfaceFlinger 中重要的处理函数 以及 surface Layer 的属性

1 )、 readToRun

   SurfaceFlinger thread 的初始化函数,主要任务是分配内存和设置底层接口 (EGL&HAL)

status_t SurfaceFlinger::readyToRun()

mServerHeap = new MemoryDealer(4096, MemoryDealer::READ_ONLY);// IPC 分配共享内存

mSurfaceHeapManager = new SurfaceHeapManager(this, 8 << 20);// flinger 分配 heap ,大小为 8M ,存放具体的显示数据

    {

       // initialize the main display

        GraphicPlane& plane(graphicPlane(dpy));

        DisplayHardware* const hw = new DisplayHardware(this, dpy);

        plane.setDisplayHardware(hw);// 保存显示接口

}

// 获取显示相关参数

    const GraphicPlane& plane(graphicPlane(dpy));

    const DisplayHardware& hw = plane.displayHardware();

    const uint32_t w = hw.getWidth();

    const uint32_t h = hw.getHeight();

    const uint32_t f = hw.getFormat();

    // Initialize OpenGL|ES

    glActiveTexture(GL_TEXTURE0);

    glBindTexture(GL_TEXTURE_2D, 0);

    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);

    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

2 )、 ThreadLoop

Surfaceflinger loop 函数,主要是等待其他接口发送的 event ,进行显示数据的合成以及显示。

bool SurfaceFlinger::threadLoop()

{

    waitForEvent();// 等待其他接口的 signal event

    // post surfaces (if needed)

    handlePageFlip();// 处理翻页机制

 

    const DisplayHardware& hw(graphicPlane(0).displayHardware());

    if (LIKELY(hw.canDraw()))

   {

        // repaint the framebuffer (if needed)

        handleRepaint();// 合并所有 layer 并填充到 buffer 中去

        postFramebuffer();// 互换 front buffer back buffer ,调用 EGL 接口进行显示

    }

}

3 )、 createSurface

提供给应用程序的主要接口,该接口可以创建一个 surface ,底层会根据参数创建 layer 以及分配内存, surface 相关参数会反馈给上层

sp<ISurface> SurfaceFlinger::createSurface(ClientID clientId, int pid,

        ISurfaceFlingerClient::surface_data_t* params,

        DisplayID d, uint32_t w, uint32_t h, PixelFormat format,

        uint32_t flags)

    int32_t id = c->generateId(pid);

    if (uint32_t(id) >= NUM_LAYERS_MAX) //NUM_LAYERS_MAX=31

    {

        LOGE("createSurface() failed, generateId = %d", id);

        return

    }

layer = createNormalSurfaceLocked(c, d, id, w, h, format, flags);// 创建 layer ,根据参数(宽高格式)分配内存(共 2 buffer front/back buffer

    if (layer)

    {

        setTransactionFlags(eTransactionNeeded);

        surfaceHandle = layer->getSurface();// 创建 surface

        if (surfaceHandle != 0)

            surfaceHandle->getSurfaceData(params);// 创建的 surface 参数反馈给应用层

    }

待续。。。

 

分享到:
评论

相关推荐

    Android display架构分析

    高通7系列的硬件架构是Android Display架构的重要组成部分,主要包括以下几个部分: 1. **MDP (Mobile Display Processor)** - MDP是高通MSM7200A内部的一个模块,主要负责显示数据的转换和部分图像处理功能,例如...

    android__display框架分析

    ### Android Display 框架分析 #### 一、硬件架构分析 ##### 高通7系列硬件架构概述 根据所提供的信息,我们重点分析高通7系列的Display硬件架构,特别是MSM7200A平台。 - **A、MDP (Mobile Digital Processor)*...

    Android显示框架详细分析

    《Android显示框架详细分析》 Android显示框架是一个复杂的系统,涉及到硬件架构、软件架构和流程设计等多个方面。本文将深入探讨这些关键知识点,以便更好地理解Android设备如何呈现图像和视频内容。 首先,让...

    Android wifi display功能优化

    本文将从架构图、代码分析和优化建议三个方面对Android WiFi Display功能进行深入分析和讨论。 一、架构图 Android WiFi Display功能的架构图分为两部分,一部分为控制部分,另一部分为数据部分。控制部分通过TCP...

    android wifi display 分析

    ### Android Wifi Display (Miracast) 核心分析 #### 一、概述 在深入探讨Android平台上关于**Wifi Display**(通常称为Miracast)的相关技术之前,我们需要明确几个概念。**Wifi Display**是一种无线显示标准,...

    0001-Android-Settings-displaySettings_RK3288_

    在Android系统中,"Settings"模块是用户与设备设置交互的核心部分,而"Display settings"则是其中至关重要的一环,它涵盖了屏幕亮度、显示分辨率、屏幕方向等与视觉体验相关的选项。"0001-Android-Settings-display...

    windriver针对android多媒体架构

    ### Windriver针对Android多媒体架构分析 #### Android多媒体架构概述 Windriver在2009年第一次Android技术大会上针对Android系统的多媒体架构进行了深入的探讨与分析。Android作为一个开放且灵活的操作系统,其...

    基于Android平台的WiFi-display sink端的设计与实现.pdf

    基于Android平台的WiFi-display sink端的设计与实现 基于Android平台的WiFi-display sink端的设计与实现是指基于Android 4.2的WiFi-direct功能实现WiFi display的sink端系统。该系统通过与source端进行capability ...

    全志 H5 android linux display 驱动

    本文将详细探讨全志H5在Android/Linux环境下如何实现display驱动。 一、全志H5显示硬件架构 全志H5集成了GPU(图形处理器),如Mali400或Mali-G31,用于处理复杂的2D和3D图形任务。此外,它还包含LCD控制器,用于与...

    高通-android__MDDI-LCD框架分析

    接下来,我们将深入探讨高通-android__MDDI-LCD框架的软件架构,特别是Android display软件架构的组成。 ##### 用户空间应用程序 (User Space Applications) 这部分包括Android应用程序及其框架和系统运行库,其中...

    android显示框架分析

    ### Android显示框架分析 #### 一、硬件架构分析:高通7系列 高通7系列的显示硬件架构主要包括以下几个关键组件: 1. **MDP (Mobile Display Processor)**:这是高通MSM7200A内部的一个核心模块,主要职责在于...

    Android下WiFiDisplay功能探究.docx编程资料

    ### Android下WiFiDisplay功能探究 #### 一、WiFiDisplay简介 ##### 1.1 WiFiDisplay概述 WiFiDisplay(WFD)是由WiFi联盟基于现有技术发展而来的一种新技术,旨在提高视频和音频传输的速度与效率。为了确保设备...

    android原生setting分析

    在深入探讨Android原生设置(Setting)的分析之前,我们需要先理解Android系统的基本结构。Android是一个基于Linux内核的操作系统,其应用程序主要由Java编写,使用Android SDK进行开发。原生设置应用(Settings)是...

    Android的系统架构

    ### Android的系统架构详解 #### 一、应用层 (Applications) **应用层**是指由Java编写的、运行在Dalvik虚拟机上的程序。这一层主要包括了预装的应用程序,例如联系人管理、邮件客户端等。此外,开发者也可以利用...

    android核心分析

    ### Android核心分析——设计意图与方法论探讨 #### 一、设计意图的探索 在深入研究Android之前,首要任务是理解其背后的设计理念。对于一个跨平台开发者而言,熟悉并掌握Android的核心概念至关重要。Android引入...

    android原生setting分析(修改版).doc

    标题和描述均指向了一个深入分析Android原生设置(Setting)应用内部结构和技术细节的文档——“android原生setting分析(修改版).doc”。此文档详细地解析了Android系统的设置模块是如何构建、数据如何存储和读取,...

    android的核心分析

    ### Android的核心分析 #### 分析方法论探讨之设计意图 在深入探讨Android系统之前,我们首先需要明确一点:为何要研究Android?对于许多开发者来说,Android不仅是一个极具吸引力的开发平台,更是一种挑战,一种...

    Android主要机制深入分析

    ### Android主要机制深入分析 #### 一、设计方法论探讨之设计意图 在探究Android复杂的内部运作机制之前,我们首先要明确研究的方向与目的。对于一个跨平台开发者来说,理解Android的核心在于把握其设计理念与实现...

    Android应用源码之xUtils-master.rar

    《深入解析Android应用源码:xUtils框架详解》 xUtils是一个由国内知名开发者Wanbo Tao开发的轻量级Android开发框架,它集成了网络请求、图片加载、数据库操作、视图注入等多个功能,极大地提高了开发效率。本文将...

Global site tag (gtag.js) - Google Analytics