卷I 第8章 深入理解Surface系统

卷I 第8章 深入理解Surface系统:连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成,以android-2.2_r1源码、全节点机制图和故障恢复证据完成验收。

学习目标

  • 能在android-2.2_r1单一历史标签内解释连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成,不跨卷拼接文件与接口身份。
  • 能操作全节点机制图,让本页 30 个坐标都具备出现、解释、实验和练习四级证据。
  • 能使用章专属诊断切片保存入口、PID/TID、对象或状态、正常结果、错误返回与资源释放。
  • 能主动制造“把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序”,再凭窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧定位、恢复、复位并以同输入重放。

从一个可失败的问题开始

卷I 第8章 深入理解Surface系统不是类名清单,而是在android-2.2_r1中回答:连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成。先预测请求经过的线程、进程与对象所有者,再运行正常样本;如果窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧不能指出首个变化,本页结论仍不可交接。

本章不变量是在android-2.2_r1固定输入下,连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成的入口身份、状态拥有者、成功结果、错误返回和资源释放均可重复观察。将“把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序”作为反例,必须在同一版本、同一输入下看到确定的错误或状态分叉,并能恢复到基线。

来源范围、历史标签与当前迁移

卷I 第8章 深入理解Surface系统以卷I出版社合法公开样章核定可见正文、目录与Android 2.2范围;样章以外不宣称复现原书正文。

AOSP版本与构建号表用于核对2.2/API 8、4.0.1/API 14、4.2.2/API 17及正式源码标签;android-2.2_r1源码树提供本页历史机制的一手坐标。当前Android架构文档只用于迁移对照,ART、Treble、稳定AIDL、模块化系统服务和现代构建工具不得倒填为三卷历史实现。

六个机制检查点

。这六项把连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成落到窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧,防止目录词出现却没有运行解释。

先预测,再操作三个专属实验

围绕卷I 第8章 深入理解Surface系统,先预测哪一个对象最先改变、“把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序”应在哪个边界暴露,以及恢复后窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧中的哪份证据必须回到原值;然后按全节点、版本因果、故障恢复的顺序操作。

分步1 / 3

1. 全节点机制与可执行探针

从卷I 第8章 深入理解Surface系统的 30 个正式坐标中选择任一节点与处理阶段,比较章专属机制说明和探针;列表完整保留,不截断节点。

正式节点 → 运行机制 → 可执行探针

卷I 第8章 深入理解Surface系统

选择目录节点和处理阶段,检查它怎样进入“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”的真实因果链。

正式目录坐标

30 个节点

第8章 深入理解Surface系统

第8章 深入理解Surface系统在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

当前动作

固定输入与所有者

使用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧检查第8章 深入理解Surface系统的输入、状态变化、错误出口和释放结果

历史坐标

android-2.2_r1

platform/frameworks/base @ android-2.2_r1

课程实验只说明独立重写的验证方法;历史实现必须回到android-2.2_r1platform/frameworks/base @ android-2.2_r1 核对。

正式目录逐项深读

下面保留 30 个正式目录坐标,但不重复套用实验流程。每个条目只回答它在连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成中的独立责任;共同的定位、单变量注错、恢复和重放动作统一由上方实验与下方练习验收。

第8章 深入理解Surface系统

第8章 深入理解Surface系统在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.1 概述

8.1 概述在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.2 一个Activity的显示

8.2 一个Activity的显示在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任要连接system_server记录、调度队列和目标进程回调。保存记录对象与进程身份,制造超时或死亡后检查队列推进、死亡清理和后续请求是否恢复。

8.2.1 Activity的创建

8.2.1 Activity的创建在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任要连接system_server记录、调度队列和目标进程回调。保存记录对象与进程身份,制造超时或死亡后检查队列推进、死亡清理和后续请求是否恢复。

8.2.2 Activity的UI绘制

8.2.2 Activity的UI绘制在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.2.3 关于Activity的总结

8.2.3 关于Activity的总结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.3 初识Surface

8.3 初识Surface在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.3.1 和Surface有关的流程总结

8.3.1 和Surface有关的流程总结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.3.2 Surface之乾坤大挪移

8.3.2 Surface之乾坤大挪移在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.3.3 乾坤大挪移的JNI层分析

8.3.3 乾坤大挪移的JNI层分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.3.4 Surface和画图

8.3.4 Surface和画图在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.3.5 初识Surface小结

8.3.5 初识Surface小结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.4 深入分析Surface

8.4 深入分析Surface在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.1 与Surface相关的基础知识介绍

8.4.1 与Surface相关的基础知识介绍在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.2 SurfaceComposerClient分析

8.4.2 SurfaceComposerClient分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.3 SurfaceControl分析

8.4.3 SurfaceControl分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.4 writeToParcel和Surface对象的创建

8.4.4 writeToParcel和Surface对象的创建在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任要沿代理、事务数据、驱动或服务端线程追踪一次请求。记录调用方与接收方身份、同步语义、句柄或对象引用,并用死亡或错误事务验证回收。

8.4.5 lockCanvas和unlockCanvasAndPost分析

8.4.5 lockCanvas和unlockCanvasAndPost分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.6 GraphicBuffer介绍

8.4.6 GraphicBuffer介绍在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.4.7 深入分析Surface的总结

8.4.7 深入分析Surface的总结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.5 SurfaceFlinger分析

8.5 SurfaceFlinger分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.5.1 SurfaceFlinger的诞生

8.5.1 SurfaceFlinger的诞生在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.5.2 SurfaceFlinger工作线程分析

8.5.2 SurfaceFlinger工作线程分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.5.3 Transaction分析

8.5.3 Transaction分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任要沿代理、事务数据、驱动或服务端线程追踪一次请求。记录调用方与接收方身份、同步语义、句柄或对象引用,并用死亡或错误事务验证回收。

8.5.4 关于SurfaceFlinger的总结

8.5.4 关于SurfaceFlinger的总结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.6 拓展思考

8.6 拓展思考在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

8.6.1 Surface系统的CB对象分析

8.6.1 Surface系统的CB对象分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.6.2 ViewRoot的你问我答

8.6.2 ViewRoot的你问我答在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任必须放回窗口会话、遍历调度和渲染后端。以同一View树对比测量、布局、绘制和输入消费,检查脏区、DisplayList与焦点变化是否形成闭环。

8.6.3 LayerBuffer分析

8.6.3 LayerBuffer分析在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任横跨窗口身份、缓冲区所有权与合成时序。以同一帧记录生产、提交、层级、消费和移除,改变Z序或所有者后检查旧Surface是否仍可见或占用资源。

8.7 本章小结

8.7 本章小结在“连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成”中的责任是界定分析分母和结论边界。先列出它包含的入口、对象和退出条件,再用窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧排除只凭类名或流程图得出的结论。

章专属复现实验

mkdir -p aosp-android-2.2_r1
cd aosp-android-2.2_r1
repo init -u https://android.googlesource.com/platform/manifest -b android-2.2_r1
repo sync -c
 
# 只在可恢复的同版本模拟器或测试机采集
adb shell dumpsys SurfaceFlinger
adb logcat -d -s SurfaceFlinger

复现卷I 第8章 深入理解Surface系统前先保存主机工具链、manifest与产品目标;android-2.2_r1历史分支通常需要隔离的旧工具链环境。与连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成有关的诊断命令只在可恢复模拟器或测试机执行,账号、媒体与设备标识使用隔离样本;现代设备输出不得冒充android-2.2_r1结果。

练习、答案与四级证据

练习

问题 1:历史边界。 怎样证明本页没有把当前Android实现倒灌到 android-2.2_r1?

问题 2:逐节点证据。 本页 30 个正式坐标如何通过出现、解释、实验与练习四级验收?

问题 3:故障恢复。 面对把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序,如何确认修复而不是掩盖症状?

术语复核与本章回顾

名词解释

本章出现的专业名词,用大白话再讲一遍。

初始输入

初始输入在本页用于锁定android-2.2_r1的事实坐标与允许输入。

调用入口

调用入口在本页用于标出连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成由谁创建、修改与释放状态。

状态迁移

状态迁移在本页用于保存能复现正常路径的对象身份和时序。

可见反馈

可见反馈在本页用于暴露把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序发生的第一个边界。

故障注入

故障注入在本页用于声明故障后重新接收请求所需的恢复条件。

复位重放

复位重放在本页用于让独立读者凭窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧得到同一结论。

完成卷I 第8章 深入理解Surface系统意味着:能解释连接Activity绘制、Surface对象迁移、GraphicBuffer传输与SurfaceFlinger合成,能操作全节点图与诊断切片,能制造把Surface当Canvas别名,忽略跨进程对象、缓冲区所有权和合成时序,还能凭窗口/Surface身份、Parcel句柄、缓冲区生产消费序列、事务、脏区、Layer与显示帧恢复、复位和交接,而不是只在目录中找到关键词。

阅读导航

← 上一页:卷I 第7章 深入理解Audio系统 · 下一页:卷I 第9章 深入理解Vold和Rild →

讨论

评论区加载中…