【Android】 SurfaceFlinger测试应用
Android surfaceflinger测试应用SurfaceFlinger test code任务目标在这个测试用例中调用surfaceflinger的API实现在手机屏幕上绘制一块纯色区域代码surfaceFlinger_test.cpp#include cutils/memory.h #include utils/Log.h #include android/native_window.h #include binder/IPCThreadState.h #include binder/ProcessState.h #include binder/IServiceManager.h #include gui/Surface.h #include gui/SurfaceComposerClient.h using namespace android; int main(int argc, char** argv) { // set up the thread-pool spProcessState proc(ProcessState::self()); ProcessState::self()-startThreadPool(); // create a client to surfaceflinger spSurfaceComposerClient client new SurfaceComposerClient(); spSurfaceControl surfaceControl client-createSurface(String8(resize), 320, 240, PIXEL_FORMAT_RGB_565, 0); spSurface surface surfaceControl-getSurface(); SurfaceComposerClient::Transaction transaction; transaction.setLayer(surfaceControl, 100000); transaction.setSize(surfaceControl, 320, 240); transaction.show(surfaceControl); transaction.apply(); ANativeWindow_Buffer outBuffer; surface-lock(outBuffer, NULL); ssize_t bpr outBuffer.stride * bytesPerPixel(outBuffer.format); // 填充每个像素为 RGB565 格式下的绿色0x07E0 uint16_t greenColor 0x07E0; for (int i 0; i outBuffer.height; i) { uint16_t *row (uint16_t*)((char*)outBuffer.bits i * bpr); for (int j 0; j outBuffer.width; j) { row[j] greenColor; } } surface-unlockAndPost(); IPCThreadState::self()-joinThreadPool(); return 0; }Android.bpcc_binary { name: surfaceFlinger_test, include_dirs: [ frameworks/native/include, system/core/include, system/libbase/include, frameworks/native/libs/gui, ], srcs: [surfaceFlinger_test.cpp], shared_libs: [ libui, libcutils, libutils, libbinder, libgui, libvndksupport, libbinder_ndk, ], }编译在platform_vendor/frameworks/native/ 路径下创建文件夹a_test并在该文件夹下添加surfaceFlinger_test.cpp和Android.bp两个文件在该文件夹路径下指令mmsoong构建系统的构建命令编译通过的结果验证刷机adb root adb push ./path/surfaceFlinger_test /data/local/tmp/为什么是 data/local/tmp 这里参考来源是/frameworks/native/services/surfaceflinger/tests/AndroidTest.xml 文件中说明了总结在这个测试用例编写过程中网上搜了许多都是比较老的帖子很多函数都已经过时了如SurfaceComposerClient::openGlobalTransaction(); surfaceControl-setSize(320, 240); SurfaceComposerClient::closeGlobalTransaction(); android_memset16((uint16_t*)outBuffer.bits, 0x07E0, bpr*outBuffer.height);通过查询资料和源码找到了对应的解决方法就是使用Transaction 事件新的写法如下SurfaceComposerClient::Transaction transaction; transaction.setLayer(surfaceControl, 100000); transaction.setSize(surfaceControl, 320, 240); transaction.show(surfaceControl); transaction.apply();这个测试用例虽然很简单但比起直接阅读庞大的surfaceflinger.cpp来说更便于理解surfaceflinger的工作方式是学习surfaceflinger的0-1的突破后面可以基于这个demo来做进一步进阶调用更多的API逐步加深对surfaceflinger的理解。

相关新闻

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 文章内容 📒 📝 步骤 1:下载 OpenWrt img 镜像 📝 步骤 2:创建新的虚拟机 📝 步骤 5:启动虚拟机并安装 OpenWrt 📝 步骤 6:配置 OpenWrt 网络设置 🎈 获取方式 🎈 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 在使用…

2026/7/23 18:43:01阅读更多 →
示波器测量三菱FX3U PLC内置时钟脉冲信号波形

示波器测量三菱FX3U PLC内置时钟脉冲信号波形

三菱FX3U系列PLC内置的三种时钟脉冲信号:M8011:提供100Hz(0.01秒周期)的连续脉冲信号M8012:提供10Hz(0.1秒周期)的连续脉冲信号M8013:同样为100Hz(0.01秒周期&#xff09…

2026/7/23 18:43:01阅读更多 →
Unity强化学习实战项目—自动泊车「Unity+MLagent」—效果展示【源码在文末】

Unity强化学习实战项目—自动泊车「Unity+MLagent」—效果展示【源码在文末】

Unity强化学习实战项目—自动泊车「UnityMLagent」—效果展示【源码在文末】 文章目录Unity强化学习实战项目—自动泊车「UnityMLagent」—效果展示【源码在文末】一、内容与步骤二、效果展示三、源码一、内容与步骤 1、搭建一个简单的停车场模型并实现小车运动,要…

2026/7/23 18:41:01阅读更多 →
13 - VRAM驱逐与恢复

13 - VRAM驱逐与恢复

难度: 🔴 高级 预计学习时间: 2.5小时 前置知识: 第7章(内存迁移机制)、第10章(MMU Notifier集成)、dma-fence基础 📋 概述 VRAM驱逐(Eviction)是SVM中最复杂的内存管理场景之一。当GPU显存不足,或CPU需要访问已迁移到VRAM的页面时,必须将VRAM中的数据迁移回系统内…

2026/7/23 20:03:28阅读更多 →
N1盒子刷OpenWRT避坑指南:从降级到公网访问的全流程实录

N1盒子刷OpenWRT避坑指南:从降级到公网访问的全流程实录

N1盒子OpenWRT实战:从零避坑到远程访问的完整手册 手里这台N1盒子,大概是这几年折腾党们绕不开的“神机”了。百元出头的价格,配上S905D的芯片、2G内存和千兆网口,让它从一台普通的电视盒子,变成了能刷OpenWRT、Armbian、CoreELEC的“瑞士军刀”。尤其是刷成OpenWRT软路由…

2026/7/23 20:03:28阅读更多 →
OpenWrt/LEDE软路由AP模式配置实战:无缝融入现有网络

OpenWrt/LEDE软路由AP模式配置实战:无缝融入现有网络

1. 为什么要把软路由变成AP?聊聊我的真实需求 大家好,我是老张,一个在智能硬件和网络这块折腾了十多年的老玩家。今天想和大家聊聊一个非常具体,但又特别实用的场景:把一台刷了OpenWrt或LEDE的软路由,从“主路由”模式,切换成“AP模式”。 听起来有点技术?别怕,我保…

2026/7/23 20:03:28阅读更多 →
优酷路由宝YK-L1刷机实战:从Breed刷入到固件升级全解析

优酷路由宝YK-L1刷机实战:从Breed刷入到固件升级全解析

1. 为什么我们要折腾优酷路由宝YK-L1? 如果你手头有一台吃灰多年的优酷路由宝YK-L1,或者几十块钱从二手市场淘来了这么个“电子古董”,那你可算是捡到宝了。这玩意儿当年主打“能赚钱”,靠上传带宽换积分,但现在这个功能基本废了。不过,它硬件底子其实相当不错:MT7620A…

2026/7/23 20:03:28阅读更多 →
学生工作管理系统用户手册:操作指南与功能详解

学生工作管理系统用户手册:操作指南与功能详解

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

2026/7/23 20:03:28阅读更多 →
Python在自然科学中的AI应用:高维数据处理与可解释性分析

Python在自然科学中的AI应用:高维数据处理与可解释性分析

1. 项目概述:当Python遇上自然科学中的AI在实验室泡了十年,我深刻体会到自然科学研究者面对高维数据时的痛苦——那些基因序列、气象观测、天体物理信号,动辄成千上万个维度,Excel连打开都费劲。直到五年前我开始系统地将机器学习…

2026/7/23 20:01:27阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →