当前位置: 首页 > news >正文

Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:Android图形系统中,HWC特别的复杂,特别是HWComposer、ComposerImpl、Composer、Hwc2::Composer之间的关系,有种剪不断理还乱的感觉,通过几个演化例子,看清楚它本来的面目。

2.HWComposer、ComposerImpl、Composer、Hwc2::Composer定义与实现

1.HWComposer实现

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.h

<1>.android::HWComposer定义
namespace Hwc2 {
class Composer;
}namespace android {
class HWComposer {virtual ~HWComposer();virtual void setCallback(HWC2::ComposerCallback*) = 0;....
};
}
<2>.impl::HWComposer定义(继承自android::HWComposer)
namespace impl {class HWComposer final : public android::HWComposer {
public:explicit HWComposer(std::unique_ptr<Hwc2::Composer> composer);explicit HWComposer(const std::string& composerServiceName);~HWComposer() override;
};
}
<3>.impl::HWComposer实现

frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp

namespace impl {HWComposer::HWComposer(std::unique_ptr<Hwc2::Composer> composer): mComposer(std::move(composer)),mMaxVirtualDisplayDimension(static_cast<size_t>(sysprop::max_virtual_display_dimension(0))),mUpdateDeviceProductInfoOnHotplugReconnect(sysprop::update_device_product_info_on_hotplug_reconnect(false)) {}HWComposer::HWComposer(const std::string& composerServiceName): HWComposer(std::make_unique<Hwc2::impl::Composer>(composerServiceName)) {}HWComposer::~HWComposer() {mDisplayData.clear();
}
}

HWComposer构造函数通过它的委托构造函数,通过std::make_uniqueHwc2::impl::Composer(composerServiceName)实例画,那么Hwc2::impl::Composer的实现在哪呢?

2.ComposerImpl实现(Hwc2::Composer是它的别名)

hardware/interfaces/graphics/composer/2.1/utils/hal/include/composer-hal/2.1/Composer.h

<1>.Composer定义,它是ComposerImpl的别名
using Composer = detail::ComposerImpl<IComposer, ComposerHal>;
template <typename Interface, typename Hal>
class ComposerImpl : public Interface {public:static std::unique_ptr<ComposerImpl> create(std::unique_ptr<Hal> hal) {

相关文章:

Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

MASK-RCNN tensorflow环境搭建

此教程默认你已经安装了Anaconda&#xff0c;且tensorflow 为cpu版本。为什么不用gpu版本&#xff0c;原因下面解释。 此教程默认你已经安装了Anaconda。 因为tensorflow2.1后的gpu版&#xff0c;不支持windows。并且只有高版本的tensorflow才对应我的CUDA12.2&#xff1b; 而…...

企业级开发命名规范有哪些?

企业级开发通常会遵循一些命名规范以提高代码的可读性、可维护性和一致性。以下是一些常见的企业级开发命名规范&#xff1a; 1&#xff1a;变量和函数命名&#xff1a; 使用有意义的名称&#xff0c;能够清晰描述变量或函数的用途和功能。使用驼峰命名法&#xff08;camelCa…...

sitespeedio.io 前端页面监控安装部署接入influxdb 到grafana

1.docker部署influxdb,部署1.8一下&#xff0c;不然语法有变化后面用不了grafana模板 docker run -d -p 8086:8086 --name influxdb -v $PWD/influxdb-data:/var/lib/influxdb influxdb:1.7.11-alpine docker exec -it influxdb_id bash #influx create user admin with pass…...

ModStartCMS v7.5.0 内外网映射节流,安全使用增强

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…...

【LVS实战】02 搭建一个LVS-NAT模式实验

一、网络结构 用虚拟机搭建如下的几台机器&#xff0c;并配置如下的ip 关于虚拟机网卡和网络的配置&#xff0c;可以参考 iptables章节&#xff0c;05节&#xff1a;网络转发实验 主机A模拟外网的机器 B为负载均衡的机器 C和D为 RealServer 二、C和D主机的网关设置 C和D机…...

Word 将文档中的【第几条】批量加粗

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 我要制作一份文档&#xff0c;关于法律条文的&#xff0c;然后需要将条文中的【第几条】字样进行加粗表示&#xff0c;格式刷是不可能格式刷的&#xff0c;这明显不适合此种批量的操作&#xff0c;浪费事件。所以…...

苹果AirTag固件更新

苹果公司针对其热销的物品追踪器 AirTag 于今天发布了新的固件更新&#xff0c;最新版本号为 2A61&#xff0c;但是这次更新苹果并未提供发布说明&#xff0c;所以目前还不知道这次更新有什么新内容。 关于这次更新&#xff0c;用户无法自己手动更新 AirTag 固件&#xff0c;因…...

04.Oracle的体系架构

Oracle的体系架构 一、主要组件 一、主要组件 下面是一张网图&#xff0c;大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件&#xff1a;实例&#xff08;Instance&#xff09;、数据库&#xff08;Database&#xff09;、表空间&#xff…...

01【保姆级】-GO语言特点和安装使用和hello

01-GO语言基本概念和安装使用 一、概念1.1 Go语言的诞生1.2 GO语言的特点&#xff1a; 二、安装go2.1 安装2.2 安装环境变量 三、下载&安装goland3.1 官网下载3.2 下载后&#xff0c;进行安装&#xff1a; 四、编写Hello&#xff08;详解&#xff09; 如何学习&#xff1a;…...

EVM6678L 开发教程: IBL-TFTP 引导 elf 文件

目录 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件安装 Tftpd64测试工程测试说明 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件 参考: "C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\i2c\tftp\docs\README.txt" 此教程介绍如何在 EVM6678L 开发板上实现 IBL-…...

接口测试 —— Jmeter 之测试片段的应用

一、什么是测试片段&#xff1f; 控制器上一种特殊的线程组&#xff0c;它与线程组处于一个层级。与线程组不同的就是&#xff1a;测试片段不会执行。它是一个模块控制器或者被控制器应用时才会被执行。通常与Include Controller或模块控制器一起使用。 1.1 那它有啥作用&…...

接入文心一言实战(一):API申请与测试

大家好&#xff0c;我是豆小匠。 这期来介绍申请百度文心一言API的步骤。 第一步 注册百度智能云账号 网址&#xff1a;https://login.bce.baidu.com/new-reg?tplbceplat&fromportal 第二步&#xff1a;申请预置模型 网址&#xff1a;https://console.bce.baidu.com/qi…...

518抽奖软件,安全稳定,不怕手抖误按键

518抽奖软件简介 518抽奖软件&#xff0c;518我要发&#xff0c;超好用的年会抽奖软件&#xff0c;简约设计风格。 包含文字号码抽奖、照片抽奖两种模式&#xff0c;支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 防误按功能 入口&#xff1a; 主界面上点右…...

【STM32G431RBTx】备战蓝桥杯嵌入式汇总

文章目录 前言1.省赛模块总结 前言 蓝桥杯嵌入式要准备的模块还是有些数目的&#xff0c;做个目录方便查询 1.省赛模块 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LED 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→LCD 【STM32G431RBTx】备战蓝桥杯嵌入式→基本模块→…...

【抽奖系统】

文章目录 1. DDD四层架构2. 项目搭建 1. DDD四层架构 技术&#xff1a;SpringBoot、Mybatis、Dubbo、MQ、Redis、Mysql、ELK、分库分表、Otter 架构&#xff1a;DDD 领域驱动设计、充血模型、设计模式 应用层{application} 应用服务位于应用层。用来表述应用和用户行为&#…...

如何在外SSH远程连接Ubuntu系统【无公网IP】

如何在外SSH远程连接Ubuntu系统【无公网IP】 文章目录 如何在外SSH远程连接Ubuntu系统【无公网IP】前言1. 在Ubuntu系统下安装cpolar软件2. 完成安装后打开cpolar客户端web—UI界面3. 创建隧道取得连接Ubuntu系统公网地址4. 打开Windows的命令界面并输入命令 前言 随着科技和经…...

在防御CC攻击上,高防CDN起着什么作用?

在当今数字化世界中&#xff0c;网络安全攻击已经成为普遍而严峻的威胁。特别是分布式拒绝服务攻击&#xff08;DDoS&#xff09;和CC攻击&#xff0c;它们有潜力使网络服务陷入完全瘫痪状态。为了应对这些威胁&#xff0c;采用高级防御CDN&#xff08;内容传递网络&#xff09…...

被这7款在线涂鸦画板惊艳到,手残也能画出涂鸦大片!

作为一名涂鸦爱好者或者手帐达人&#xff0c;你是否在寻找好用的在线涂鸦画板软件呢&#xff1f;涂鸦画板软件释放了创造性的无限可能&#xff0c;让你能够将想法转化为令人惊叹的视觉效果&#xff0c;并轻松地与客户、同行和全球观众分享你的作品。 在这篇文章中&#xff0c;…...

pt权重转onnx记录

方法: 1.一般YOLO 会自带一个权重pt转onnx模型的代码 export.py 2.打开export.py &#xff0c;我们运行该文件可以通过命令行运行&#xff0c;对照修改argument参数即可 3.运行命令行如下&#xff1a; python ./models/export.py --weights ./models/best.pt weights&#x…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...