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
参数反馈给应用层
}
}
待续。。。
相关推荐
高通7系列的硬件架构是Android Display架构的重要组成部分,主要包括以下几个部分: 1. **MDP (Mobile Display Processor)** - MDP是高通MSM7200A内部的一个模块,主要负责显示数据的转换和部分图像处理功能,例如...
### Android Display 框架分析 #### 一、硬件架构分析 ##### 高通7系列硬件架构概述 根据所提供的信息,我们重点分析高通7系列的Display硬件架构,特别是MSM7200A平台。 - **A、MDP (Mobile Digital Processor)*...
《Android显示框架详细分析》 Android显示框架是一个复杂的系统,涉及到硬件架构、软件架构和流程设计等多个方面。本文将深入探讨这些关键知识点,以便更好地理解Android设备如何呈现图像和视频内容。 首先,让...
本文将从架构图、代码分析和优化建议三个方面对Android WiFi Display功能进行深入分析和讨论。 一、架构图 Android WiFi Display功能的架构图分为两部分,一部分为控制部分,另一部分为数据部分。控制部分通过TCP...
### Android Wifi Display (Miracast) 核心分析 #### 一、概述 在深入探讨Android平台上关于**Wifi Display**(通常称为Miracast)的相关技术之前,我们需要明确几个概念。**Wifi Display**是一种无线显示标准,...
在Android系统中,"Settings"模块是用户与设备设置交互的核心部分,而"Display settings"则是其中至关重要的一环,它涵盖了屏幕亮度、显示分辨率、屏幕方向等与视觉体验相关的选项。"0001-Android-Settings-display...
### Windriver针对Android多媒体架构分析 #### Android多媒体架构概述 Windriver在2009年第一次Android技术大会上针对Android系统的多媒体架构进行了深入的探讨与分析。Android作为一个开放且灵活的操作系统,其...
基于Android平台的WiFi-display sink端的设计与实现 基于Android平台的WiFi-display sink端的设计与实现是指基于Android 4.2的WiFi-direct功能实现WiFi display的sink端系统。该系统通过与source端进行capability ...
本文将详细探讨全志H5在Android/Linux环境下如何实现display驱动。 一、全志H5显示硬件架构 全志H5集成了GPU(图形处理器),如Mali400或Mali-G31,用于处理复杂的2D和3D图形任务。此外,它还包含LCD控制器,用于与...
接下来,我们将深入探讨高通-android__MDDI-LCD框架的软件架构,特别是Android display软件架构的组成。 ##### 用户空间应用程序 (User Space Applications) 这部分包括Android应用程序及其框架和系统运行库,其中...
### Android显示框架分析 #### 一、硬件架构分析:高通7系列 高通7系列的显示硬件架构主要包括以下几个关键组件: 1. **MDP (Mobile Display Processor)**:这是高通MSM7200A内部的一个核心模块,主要职责在于...
### Android下WiFiDisplay功能探究 #### 一、WiFiDisplay简介 ##### 1.1 WiFiDisplay概述 WiFiDisplay(WFD)是由WiFi联盟基于现有技术发展而来的一种新技术,旨在提高视频和音频传输的速度与效率。为了确保设备...
在深入探讨Android原生设置(Setting)的分析之前,我们需要先理解Android系统的基本结构。Android是一个基于Linux内核的操作系统,其应用程序主要由Java编写,使用Android SDK进行开发。原生设置应用(Settings)是...
### Android的系统架构详解 #### 一、应用层 (Applications) **应用层**是指由Java编写的、运行在Dalvik虚拟机上的程序。这一层主要包括了预装的应用程序,例如联系人管理、邮件客户端等。此外,开发者也可以利用...
### Android核心分析——设计意图与方法论探讨 #### 一、设计意图的探索 在深入研究Android之前,首要任务是理解其背后的设计理念。对于一个跨平台开发者而言,熟悉并掌握Android的核心概念至关重要。Android引入...
标题和描述均指向了一个深入分析Android原生设置(Setting)应用内部结构和技术细节的文档——“android原生setting分析(修改版).doc”。此文档详细地解析了Android系统的设置模块是如何构建、数据如何存储和读取,...
### Android的核心分析 #### 分析方法论探讨之设计意图 在深入探讨Android系统之前,我们首先需要明确一点:为何要研究Android?对于许多开发者来说,Android不仅是一个极具吸引力的开发平台,更是一种挑战,一种...
### Android主要机制深入分析 #### 一、设计方法论探讨之设计意图 在探究Android复杂的内部运作机制之前,我们首先要明确研究的方向与目的。对于一个跨平台开发者来说,理解Android的核心在于把握其设计理念与实现...
《深入解析Android应用源码:xUtils框架详解》 xUtils是一个由国内知名开发者Wanbo Tao开发的轻量级Android开发框架,它集成了网络请求、图片加载、数据库操作、视图注入等多个功能,极大地提高了开发效率。本文将...