【Android】 SurfaceFlinger测试应用
📅 2026/7/23 18:42:54
👁️ 次浏览
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的理解。
文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 文章内容 📒 📝 步骤 1:下载 OpenWrt img 镜像 📝 步骤 2:创建新的虚拟机 📝 步骤 5:启动虚拟机并安装 OpenWrt 📝 步骤 6:配置 OpenWrt 网络设置 🎈 获取方式 🎈 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 在使用…
📅 2026/7/23 18:42:54
适用场景:配置 OpenAI Codex CLI 或登录 Codex 桌面端时,遇到强制手机号验证、收不到短信验证码、86 号码不支持等问题。
核心思路:利用 Chrome 浏览器已登录的 ChatGPT 会话,通过本地扩展一键导出 auth.json,让 Code…
📅 2026/7/23 18:41:53
1. 项目概述与核心价值在汽车电子、工业控制这些对可靠性要求近乎苛刻的领域,一个随机的比特翻转都可能导致灾难性后果。想象一下,一辆高速行驶的汽车,其发动机控制单元(ECU)因为宇宙射线或电磁干扰导致内存中一个关键…
📅 2026/7/23 18:41:53
今日的主要内容为:Python的基本数据类型 Python整数进制转换Python数据类型转换函数一、Python的基本数据类型1、数字类型(1)int例:1、2、3、4、5、6...等等,在Python中,整数变量的定义可以使用int进行定义…
📅 2026/7/23 21:19:56
1. 项目概述:为什么需要深入理解F28x的内存与总线?如果你正在使用TI的TMS320F28x系列DSP进行电机控制、数字电源或者任何对实时性要求苛刻的嵌入式开发,那么你迟早会碰到一个核心问题:为什么我的代码跑得不够快?或者&a…
📅 2026/7/23 21:19:56
1. 项目概述与核心价值在搞嵌入式开发,尤其是像电机控制、数字电源这类对实时性和功耗都极其敏感的领域,选对一颗DSP只是第一步,真正决定系统稳定性和效率的,往往是那些最基础的模块——系统时钟和电源管理。我这些年用TI的C2000系…
📅 2026/7/23 21:19:56
1. 项目概述与核心价值在嵌入式系统开发,尤其是工业控制、电机驱动和汽车电子这些对实时性和可靠性要求极高的领域,德州仪器(TI)的TMS320R281x系列DSP一直是工程师手中的利器。我接触这个系列芯片超过十年,从早期的F28…
📅 2026/7/23 21:19:56
适用于,公司电脑和无管理员权限的操作办法,可以实现VSCODE转PDF为markdown;1. 核心工具与安装推荐工具:pdfplumber(纯 Python 库,无需外部命令,兼容性极佳)。正确安装命令࿱…
📅 2026/7/23 21:19:56
做知识付费/有声书用什么配音软件?2026年长文本TTS批量生成实测
核心结论:如果你跟我一样在做线上课或有声书,千万别用那些只能粘几千字的小工具。批量处理能力和SSML长文本稳定性是第一指标。实测下来,fuym.cn 浮云梦配音&#…
📅 2026/7/23 21:18:56
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/23 7:06:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/23 17:07:28
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50