`

Android display架构分析(七-2)

 
阅读更多

http://hi.baidu.com/leowenj/blog/item/ba4c5d6378a5da48eaf8f86a.html

 

Android display架构分析(七-2)

 

4)、 setClientState

处理上层的各个命令,并根据 flag 设置 event 通知 Threadloop 进行处理

status_t SurfaceFlinger::setClientState(

        ClientID cid,

        int32_t count,

        const layer_state_t* states)

{

    Mutex::Autolock _l(mStateLock);

    uint32_t flags = 0;

    cid <<= 16;

    for (int i=0 ; i<count ; i++) // 检测所有存在 layer 的状态标志

    {

        const layer_state_t& s = states[i];

        LayerBaseClient* layer = getLayerUser_l(s.surface | cid);

        if (layer)

             {

            const uint32_t what = s.what;

             // 检测应用层是否设置各个标志,如果有则通知底层完成对应操作,并通知 ThreadLoop 做对应的处理

             if (what & eDestroyed) // 删除该层 Layer

                  {

                if (removeLayer_l(layer) == NO_ERROR)

                  {

                    flags |= eTransactionNeeded;

                    continue;

                }

            }

            if (what & ePositionChanged) // 显示位置变化

                  {

                if (layer->setPosition(s.x, s.y))

                    flags |= eTraversalNeeded;

            }

            if (what & eLayerChanged) //Layer 改变

                  {

                if (layer->setLayer(s.z))

                   {

                    mCurrentState.layersSortedByZ.reorder(

                            layer, &Layer::compareCurrentStateZ);

                    flags |= eTransactionNeeded|eTraversalNeeded;

                }

            }

            if (what & eSizeChanged)

                   {

                if (layer->setSize(s.w, s.h))// 设置宽高变化

                    flags |= eTraversalNeeded;

            }

            if (what & eAlphaChanged) {// 设置 Alpha 效果

                if (layer->setAlpha(uint8_t(255.0f*s.alpha+0.5f)))

                   flags |= eTraversalNeeded;

            }

            if (what & eMatrixChanged) {// 矩阵参数变化

                if (layer->setMatrix(s.matrix))

                    flags |= eTraversalNeeded;

            }

            if (what & eTransparentRegionChanged) {// 显示区域变化

                if (layer->setTransparentRegionHint(s.transparentRegion))

                    flags |= eTraversalNeeded;

            }

            if (what & eVisibilityChanged) {// 是否显示

                if (layer->setFlags(s.flags, s.mask))

                    flags |= eTraversalNeeded;

            }

        }

    }

if (flags)

{

        setTransactionFlags(flags);// 通过 signal 通知 ThreadLoop

    }

    return NO_ERROR;

}

5 )、 composeSurfaces

该接口在 Threadloop 中被调用,负责将所有存在的 surface 进行合并, OpenGl 模块负责这个部分。

6 )、 postFramebuffer

              该接口在 Threadloop 中被调用,负责将合成好的数据(存于 back buffer 中)推入在 front buffer 中,然后调用 HAL 接口命令底层显示。

7 )、 3 中可知,上层每创建一个 surface 的时候,底层都会同时创建一个 layer ,下面看一下 surface layer 的相关属性。

Note code 中相关结构体太大,就不全部罗列出来了

   A Surface 相关属性(详细参考文件 surface.h

       a1 SurfaceID 根据此 ID 把相关 surface layer 对应起来

      a2 SurfaceInfo

               包括宽高格式等信息

       a3 2 buffer 指针、 buffer 索引等信息

   B Layer 相关属性(详细参考文件 layer.h/layerbase.h/layerbitmap.h

               包括 Layer ID 、宽高、位置、 layer alpha 指、前后 buffer 地址及索引、 layer 的状态信息(如 eFlipRequested eBusy eLocked 等)

 

分享到:
评论

相关推荐

    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系统的设置模块是如何构建、数据如何存储和读取,...

    0001-YYT-MIPI7LCD-tinker-2s-android11.zip

    【标题】"0001-YYT-MIPI7LCD-tinker-2s-android11.zip" 提供的是一个针对TinkerBoard2主板的Android 11系统更新,主要目的是配置并支持YYT-MIPI7LCD显示屏以及相应的触摸驱动。这个压缩包包含了必要的补丁和配置文件...

    android的核心分析

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

    Android主要机制深入分析

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

    Android应用源码之xUtils-master.rar

    2. **ViewUtils**:实现了Android UI组件的注解注入,通过@ViewById注解,可以快速找到并操作Activity或Fragment中的UI元素,简化了代码编写。 3. **BitmapUtils**:图片处理模块,支持图片缓存、图片压缩、圆角...

Global site tag (gtag.js) - Google Analytics