【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的理解。

相关新闻

DMA裸板驱动使用说明

DMA裸板驱动使用说明

1 DMA简要说明1.1 GDP812的dmac812 dmac在4个subsys中集成,分别是:sysctrl、safety、mem、audio;dmac的apb slv memmap要根据各subsys 在SOC分配的地址空间决定;dmac的axi master能访问到的memmap 同样的需要去根据各subsys访问能…

2026/10/5 0:14:28 阅读更多 →
丹摩平台 | 如何在丹摩平台创建一个自己的GPU云实例

丹摩平台 | 如何在丹摩平台创建一个自己的GPU云实例

丹摩平台介绍与说明 丹摩平台,特别是其丹摩智算(DAMODEL)平台,是一个专为AI打造的智算云平台。以下是对丹摩平台的详细介绍及其主要功能的概述: 1、平台介绍 丹摩智算平台致力于提供丰富的算力资源与基础设施&#xff…

2026/10/6 12:31:02 阅读更多 →
揭秘 GitHub 最火的开源 Skills 仓库,夯爆了!30 秒带你用上,让 AI 效率起飞

揭秘 GitHub 最火的开源 Skills 仓库,夯爆了!30 秒带你用上,让 AI 效率起飞

大家好,我是程序员鱼皮。 如今的 GitHub 真是太魔幻了,有个 AI 相关的项目,几乎全是 Markdown 文本文件,但是不到半年就拿到了 18 万 Star! 这个仓库叫 skills,作者 Matt Pocock 是前端 TypeScript 领域很…

2026/10/2 13:15:30 阅读更多 →

最新新闻

苹果叶片病害识别数据集实战:1700张标注图像训练CNN分类模型

苹果叶片病害识别数据集实战:1700张标注图像训练CNN分类模型

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:47:11 阅读更多 →
PADS VX2.7 Gerber输出实战指南:从设计到可投产制造包

PADS VX2.7 Gerber输出实战指南:从设计到可投产制造包

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:47:10 阅读更多 →
刀具识别数据集实战:VOC转YOLO训练与避坑指南

刀具识别数据集实战:VOC转YOLO训练与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:47:09 阅读更多 →
基于C++与EasyX的飞机大战小游戏开发实战

基于C++与EasyX的飞机大战小游戏开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:47:08 阅读更多 →
PCB内层棕化与BondFilm工艺:粉红圈、微蚀量与参数管控

PCB内层棕化与BondFilm工艺:粉红圈、微蚀量与参数管控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 15:47:07 阅读更多 →
CC2530 Zigbee组网实战:从协议栈配置到问题排查全解析

CC2530 Zigbee组网实战:从协议栈配置到问题排查全解析

我直接说结论:CC2530这套方案,放到今天看确实有点老,但它依然是国内物联网教学、产品原型验证、小规模节点接入里用得最多的一套东西。原因很简单,资料多、成本低、协议栈闭环完整,而且踩坑的经验满大街都是&#xff0…

2026/10/7 15:46:06 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:12 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:13 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:12 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →