Android 8.0 SurfaceFlinger
一、SurfaceFlinger编译模块组成
码路径:frameworks/native/services/surfaceflinger
SurfaceFlinger二进制分成surfaceflinger(main入口)可执行文件和libsurfaceflinger.so库文件。surfaceflinger文件有main_surfaceflinger.cpp文件编译而成,为模块入口,真正实现在so文件中。
Android.mk代码模块编译配置如下:
surfaceflinger
LOCAL_SRC_FILES := \ main_surfaceflinger.cpp ....
LOCAL_MODULE := surfaceflinger
libsurfaceflinger.so
LOCAL_SRC_FILES := \ Client.cpp \ ... LayerRejecter.cpp \ ... RenderEngine/GLES20RenderEngine.cpp \ LOCAL_MODULE := libsurfaceflinger
...
ifeq ($(TARGET_USES_HWC2),true) LOCAL_CFLAGS += -DUSE_HWC2 LOCAL_SRC_FILES += \ SurfaceFlinger.cpp \ DisplayHardware/HWComposer.cpp
else LOCAL_SRC_FILES += \ SurfaceFlinger_hwc1.cpp \ DisplayHardware/HWComposer_hwc1.cpp
endif
ASFDSFADF
二、SurfaceFlinger可执行二进制文件surfaceflinger
int main(int, char**) {
// 从8.0开始,Android提供了hidl机制,将原先直接由JNI->Native->HAL的接口调用形式,统一规范成hidl service/client交互形式。该方式从一方面规范和统一了Android Framework和HAL的调用机制,但实际上,从项目维度,这种调用方式对性能上开销,将比直接调用的方式要花费更多的时间。startHidlServices();signal(SIGPIPE, SIG_IGN);// When SF is launched in its own process, limit the number of// binder threads to 4.ProcessState::self()->setThreadPoolMaxThreadCount(4);// start the thread poolsp<ProcessState> ps(ProcessState::self());ps->startThreadPool();
// 初始化SurfaceFlinger对象,由强指针指向。SurfaceFlinger继承RefBase类,所以此处一旦new出对象赋给sp指针后,将立刻出发SurfaceFlinger类的onFirstRef方法的调用。// instantiate surfaceflingersp<SurfaceFlinger> flinger = new SurfaceFlinger();setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY);set_sched_policy(0, SP_FOREGROUND);// Put most SurfaceFlinger threads in the system-background cpuset// Keeps us from unnecessarily using big cores// Do this after the binder thread pool initif (cpusets_enabled()) set_cpuset_policy(0, SP_SYSTEM);
// SurfaceFlinger类正式初始化// initialize before clients can connectflinger->init();
// SurfaceFlinger向ServiceManager注册Binder服务,这样在其他进程中,可以通过getService+SERVICE_NAME来获取SurfaceFlinger服务,继而可以和SurfaceFlinger类进行Binder通信。// publish surface flingersp<IServiceManager> sm(defaultServiceManager());sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);// publish GpuServicesp<GpuService> gpuservice = new GpuService();sm->addService(String16(GpuService::SERVICE_NAME), gpuservice, false);struct sched_param param = {0};param.sched_priority = 2;if (sched_setscheduler(0, SCHED_FIFO, ¶m) != 0) {ALOGE("Couldn't set SCHED_FIFO");}
// SurfaceFlinger类进入主循环(此处注意SurfaceFlinger类未继承Threads类,不遵循Threads类的接口执行顺序)// run surface flinger in this threadflinger->run();return 0;
}
三、SurfaceFlinger库文件libsurfaceflinger.so
Android 8.0 SurfaceFlinger相关推荐
- Android 7.0 init.rc的一点改变
点击打开链接 在Android 7之前的版本中,系统Native服务,不管它们的可执行文件位于系统什么位置都定义在根分区的init.*.rc文件中.这造成init*.rc文件臃肿庞大,给维护带来了一些 ...
- Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问. 本文将以用户自定义的内核节点/de ...
- 解读Android 4.0 Camera原生应用程序的设计思路
解读Android 4.0 Camera原生应用程序的设计思路 一篇很不错的文章: http://my.oschina.net/jerikc/blog/90791 1. 设置摄像头方向 2. 打开线程 ...
- Android 8.0 学习(12)---init.rc语法及解析过程总结
Android 8.0 init.rc语法及解析过程总结 Android O高通默认使用QMMI取代了fastmmi,但是由于QMMI是一个APK,属于Android应用层面,所以必须等到 ...
- Android 6.0动态权限(转)
转自:http://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 Android 6.0 为了保护用户隐私,将一些权限的 ...
- Android 8.0学习(32)---Android 8.0源码目录结构详解
Android 8.0源码目录结构详解 android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统 ...
- Android 8.0系统源码分析--Camera processCaptureResult结果回传源码分析
相机,从上到下概览一下,真是太大了,上面的APP->Framework->CameraServer->CameraHAL,HAL进程中Pipeline.接各种算法的Node.再往下的 ...
- android 开机动画竖屏,Android 5.0 开机横屏修改方法
如果理解了Android的设计的原理, 其实这个修改原理十分简单, 比一些网上流出来的粗暴的修改方式既美观又实用. 修改分为三部分: 1: 上层(Java)修改 既然设计到屏幕的修改, 肯定想到了直接 ...
- android ble 设备扫描程序,Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备...
本文将带你了解Android应用开发Android 7.0 BLE scan 问题:程序无错但扫描不到BLE设备,希望本文对大家学Android有所帮助. < 最近在做毕设,需要几周内从头学起 ...
最新文章
- 小学英语运用计算机教学自评,信息技术在小学英语课堂中如何更有效地利用教学评价...
- JavaWeb课程复习资料——中文乱码上下文处理
- C#中发送消息给指定的窗口到消息循环
- 数据结构为什么那么难?
- 远控免杀5---Veil免杀
- Shell中计算模块 bc的使用
- 学地球物理的如何搞好软件开发
- LVS_DR实现过程...
- C++学生信息管理系统7.0
- 用美图秀秀批量修改图像尺寸分辨率大小、批量修改名字
- 2021-10-11 全国大学生软件测试大赛赛前学习参考资料
- elementUI Tree组件实现双击事件
- 2017年看的tracking论文
- css做三角形横线加小三角,CSS创建三角形(小三角)的几种方法
- 量子纠缠在量子计算机中的作用,量子计算机的强大,为什么需要量子纠缠
- 仲裁器设计(二)-- Round Robin Arbiter 轮询调度算法
- 传音控股以科技立品牌,2021一季度净利大增125.93%
- Swift对接C++库
- 计算机无法查看共享的打印机,共享电脑找到了,但看不到打印机,这是为什么?如何解决?...
- vivado报错place 30-69和place 30-574