Android焦点之SurfaceFlinger的apply

接animate()的openSurfaceTransaction(),prepareSurfaces(),closeSurfaceTransaction()

1. mService.openSurfaceTransaction(),通过SurfaceControl来通知native开始一个Transaction;

2. mService.closeSurfaceTransaction(),通过SurfaceControl来通知native(SurfaceFlinger)关闭一个Transaction最终来执行合成显示等工作;

WMS#openSurfaceTransaction:New出GlobalTransactionWrapper 接animate()的dc.prepareSurfaces();

DisplayContent#prepareSurfaces:将SurfaceControl提交在了mPendingTransaction上。然后完成遍历后,将mPendingTransaction合并到全局Transaction对象上提交给SurfaceFlinger。

mergeToGlobalTransaction将提供的Transaction合并提交,然后接animate()调Wms的closeSurfaceTransaction()

WMS#closeSurfaceTransaction: 再调用SurfaceControl的内部类GlobalTransactionWrapper#applyGlobalTransaction

SurfaceComposerClient#apply: 再调用android_view_SurfaceControl.cpp的nativeApplyTransaction方法,

apply方法主要就是收集之前通过transaction属性设置方法设置所有信息都需要收集起来,比如最重要的composerStates,然后调用sf的跨进程方法setTransactionState传递到sf中。

@frameworks/base/services/core/java/com/android/server/wm/WindowAnimator.java
private void animate(long frameTimeNs) {
@frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java    
    mService.openSurfaceTransaction();
@frameworks/base/core/java/android/view/SurfaceControl.java
        SurfaceControl.openTransaction();
            sGlobalTransaction = new GlobalTransactionWrapper();
@frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
    dc.prepareSurfaces();
@frameworks/base/core/java/android/view/SurfaceControl.java    
        SurfaceControl.mergeToGlobalTransaction(transaction);
            sGlobalTransaction.merge(t);
@frameworks/base/core/jni/android_view_SurfaceControl.cpp            
                nativeMergeTransaction(mNativeObject, other.mNativeObject);
                    transaction->merge(std::move(*otherTransaction));
    mService.closeSurfaceTransaction("WindowAnimator");
@frameworks/base/core/java/android/view/SurfaceControl.java    
        SurfaceControl.closeTransaction();
            else if (--sTransactionNestCount > 0) { //open和close一一对应,保证 sTransactionNestCount 数量    
            sGlobalTransaction.applyGlobalTransaction(false);
@frameworks/base/core/jni/android_view_SurfaceControl.cpp
                nativeApplyTransaction(mNativeObject, sync);
@frameworks/native/libs/gui/SurfaceComposerClient.cpp                
                    transaction->apply(sync);
                        for (auto const& kv : mComposerStates){ composerStates.add(kv.second);  }  // 遍历mComposerStates,其中包含了所有的InputWindow
                        displayStates = std::move(mDisplayStates);
                            //最后把上面收集的Transaction相关信息,调用sf的setTransactionState进行跨进程传递到sf进程
                            sf->setTransactionState(mFrameTimelineInfo, composerStates, displayStates, flags, applyToken,mInputWindowCommands, mDesiredPresentTime, mIsAutoTimestamp,hasListenerCallbacks, listenerCallbacks, mId)
                            clear();//apply后就需要把Transaction进行clear

 

 

相关推荐

  1. Android焦点Focused Window更新(二)

    2024-07-13 23:38:03       20 阅读
  2. Android焦点FocusWindow切换流程

    2024-07-13 23:38:03       19 阅读
  3. SurfaceFlinger面试题目

    2024-07-13 23:38:03       35 阅读
  4. Android中Fragment失去焦点场景

    2024-07-13 23:38:03       22 阅读
  5. Android 音频焦点管理

    2024-07-13 23:38:03       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 23:38:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 23:38:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 23:38:03       57 阅读
  4. Python语言-面向对象

    2024-07-13 23:38:03       68 阅读

热门阅读

  1. Vue-生命周期勾子函数

    2024-07-13 23:38:03       16 阅读
  2. 计算机如何学习

    2024-07-13 23:38:03       15 阅读
  3. 要修改已经推送到远程仓库的提交信息

    2024-07-13 23:38:03       17 阅读
  4. linux 设置nginx开机自启

    2024-07-13 23:38:03       21 阅读
  5. c++贪心算法

    2024-07-13 23:38:03       18 阅读
  6. ArcGIS Pro SDK (八)地理数据库 4 查询

    2024-07-13 23:38:03       16 阅读
  7. 文本语言的上升沿写法

    2024-07-13 23:38:03       15 阅读
  8. Aop实现后端数据重复提交

    2024-07-13 23:38:03       23 阅读
  9. Android C++系列:Linux进程间关系

    2024-07-13 23:38:03       20 阅读
  10. thinkphp5多层with关联查询错误问题

    2024-07-13 23:38:03       26 阅读
  11. Understanding EtherCAT Device Serial Number Checking

    2024-07-13 23:38:03       19 阅读
  12. 1.1 Android启动概览

    2024-07-13 23:38:03       22 阅读
  13. HttpUtils工具类

    2024-07-13 23:38:03       18 阅读
  14. 风景区服务热线系统:智能化时代的旅游新选择

    2024-07-13 23:38:03       21 阅读