O 上新增 TaskSnapshot

2023-05-16

任务快照

https://source.android.google.cn/devices/tech/perf/task-snapshots#examples-and-source
android P
https://developer.android.google.cn/preview/download


1、亮屏会设置可见activity 

06-04 08:07:15.443   746  1109 V WindowManager: setVisibility isFingerprintUnlock=false
06-04 08:07:15.444   746  1109 V WindowManager: setAppVisibility..mOpeningApps.add. 222 in visible
06-04 08:07:15.444   746  1109 V WindowManager: Set focused app to: AppWindowToken{912fb3f token=Token{c183c99 ActivityRecord{a3901e0 u0 com.itel.notepad/com.itel.controller.NoteCreateActivity t80}
06-04 08:07:15.447   746  1109 V WindowManager: prepare shutdown, then allowRotate = true
06-04 08:07:15.448   746  1109 V WindowManager: setVisibility isFingerprintUnlock=false

06-04 08:07:15.448   746  1109 V WindowManager: setAppVisibility..mOpeningApps.add. 222 in visible

2、创建 TaskSnapshot 时堆栈

06-04 08:07:15.454   746  1109 D at com.android.server.wm.AppWindowContainerController.scheduleAddStartingWindow(AppWindowContainerController.java:642)
06-04 08:07:15.454   746  1109 D at com.android.server.wm.AppWindowContainerController.createSnapshot(AppWindowContainerController.java:655)
06-04 08:07:15.454   746  1109 D at com.android.server.wm.AppWindowContainerController.addStartingWindow(AppWindowContainerController.java:546)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityRecord.showStartingWindow(ActivityRecord.java:2196)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityRecord.showStartingWindow(ActivityRecord.java:2181)
06-04 08:07:15.454   746  1109 D at com.android.server.am.TaskRecord.addStartingWindowsForVisibleActivities(TaskRecord.java:2266)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityStack.addStartingWindowsForVisibleActivities(ActivityStack.java:1967)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityStackSupervisor.addStartingWindowsForVisibleActivities(ActivityStackSupervisor.java:3401)
06-04 08:07:15.454   746  1109 D at com.android.server.am.KeyguardController.keyguardGoingAway(KeyguardController.java:140)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityManagerService.keyguardGoingAway(ActivityManagerService.java:7887)
06-04 08:07:15.454   746  1109 D at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3397)
06-04 08:07:15.454   746  1109 D at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3251)
06-04 08:07:15.454   746  1109 D at android.os.Binder.execTransact(Binder.java:697)

06-04 08:07:15.454   746  1109 V WindowManager: Enqueueing ADD_STARTING


mService.mAnimationHandler.postAtFrontOfQueue(mAddStartingWindow);  


private final Runnable mAddStartingWindow = () -> {  

这个是在动画handler 中处理


WindowManager: Enqueueing ADD_STARTING    //发送处理添加TaskSnapshot  的runnable 

WindowManager: Add starting AppWindowContai        //执行runnable

3、windowmanagerservice.java 

WindowManager: addWindow: AppWindowToken{912fb3f token=Token{c183c99 ActivityRecord{a3901e0 u0 com.itel.notepad/com.itel.controller.NoteCreateActivity t80}}} startingWindow=Window{227eb6f u0 SnapshotStartingWindow for taskId=80}



public int addWindow(Session session, IWindow client, int seq,
        WindowManager.LayoutParams attrs, int viewVisibility, int displayId,
        Rect outContentInsets, Rect outStableInsets, Rect outOutsets,
        InputChannel outInputChannel) {  


final AppWindowToken aToken = token.asAppWindowToken();
if (type == TYPE_APPLICATION_STARTING && aToken != null) {
    aToken.startingWindow = win;
    if (DEBUG_STARTING_WINDOW) Slog.v (TAG_WM, "addWindow: " + aToken
            + " startingWindow=" + win);
}  

这里添加启动窗口,类型是 TYPE_APPLICATION_STARTING类型


4、


final int drawState = mWinAnimator.mDrawState;
if ((drawState == HAS_DRAWN || drawState == READY_TO_SHOW)
        && mAttrs.type != TYPE_APPLICATION_STARTING && mAppToken != null) {
    mAppToken.onFirstWindowDrawn(this, mWinAnimator);
}
  

void onFirstWindowDrawn(WindowState win, WindowStateAnimator winAnimator) {
    firstWindowDrawn = true;

    // We now have a good window to show, remove dead placeholders
    removeDeadWindows();

    if (startingWindow != null) {
        if (DEBUG_STARTING_WINDOW || DEBUG_ANIM) Slog.v(TAG, "Finish starting "
                + win.mToken + ": first real window is shown, no animation");
        // If this initial window is animating, stop it -- we will do an animation to reveal
        // it from behind the starting window, so there is no need for it to also be doing its
        // own stuff.
        winAnimator.clearAnimation();
        if (getController() != null) {
            getController().removeStartingWindow();
        }
    }
    updateReportedVisibilityLocked();
}  


有TaskSnapshot ,播放完移除TaskSnapshot。这里是app 第一个窗口准备好了,会移除TaskSnapshot ,这个是在

 at com.android.server.wm.SnapshotStartingData.createStartingSurface(SnapshotStartingData.java:39)

 at com.android.server.wm.AppWindowContainerController.lambda$-com_android_server_wm_AppWindowContainerController_5707(AppWindowContainerController.java:165)

里面到调用的,及创建surface 时调用的。





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

O 上新增 TaskSnapshot 的相关文章

随机推荐

  • 使用k-近邻算法识别手写数字。

    在之前的文章中介绍了k 近邻算法的原理知识并且用Python实现了一个分类器 xff0c 而且完成了一个简单的优化约会网站配对效果的实例 在 机器学习实战 中有关kNN的后一部分内容就是一个手写识别系统 xff0c 可以识别手写的0 9的数
  • Unable to add window -- token android.os.BinderProxy

    The problem is that the dialog need to have the 34 base 34 context of your activity not necessarily the one you 39 re la
  • HTML复选框--checkbox

    在公司实际开发中 xff0c 会经常遇到复选框全选 多选 统计选中个数的情况 xff0c 所以总结研究了一些大神的帖子 xff0c 汇总学习一下 xff01 1 统计被选中复选框的个数 2 点击复选框 xff0c 执行对应函数 3 获取复选
  • 在Ubuntu14.04不能添加PPA源到apt源的问题解决方法

    在Ubuntu14 04使用apt get 更新Git 时 xff0c 需要更新apt源 xff0c 添加一个带有最新Git的源 xff0c 如下命令 xff1a sudo add apt repository ppa git core p
  • android 12 framework开发第53节-Activity的reLaunch及onConfigurationChanged android源码分析

    hi xff0c 同学们大家好 xff01 1 Configuration应用开发背景 今天要给大家分享内容就是我们应用开发时候经常会遇到问题 xff0c 那就是如果系统一些属性变化了 xff0c 比如语言 xff0c 横竖屏幕 xff0c
  • QT 线程,实现生产者-消费者模式

    一 两种启动线程方式 xff1a 1 QThread 2 QObject moveToThread 函数 可以让 调用者的 槽中的代码 xff0c 在单独的线程执行 注 xff1a 如果该对象有 父对象 xff0c 那么它无法被移动 二 线
  • 【easyui学习笔记】3.easyui布局之边框布局

    学习参考 xff1a EasyUI 为网页创建边框布局 建设稍微实用点的界面都离不开布局 xff08 layout xff09 xff0c 我们先来了解最简单的一种布局 xff1a 边框布局 xff08 border layout xff0
  • Android的四种启动模式以及onNewIntent方法

    前言 想起来写这个是因为之前在开发过程中遇到在onStart 方法中使用getIntent 方法无法获取到启动activity时传入的数据 xff0c 也是纳闷了很久 xff0c 然后就决定好好看一下这个地方 xff0c 本文章会结合简单的
  • selenium webdriver 页面css和xpath定位

    对于html来说 xff0c 不管用什么浏览器打开 xff0c 他的架构是不变的 xff0c 所以对于编写自动化测试程序来说 xff0c 基于什么浏览器开发 xff0c 差异不大 xff0c 所以这里推荐使用chrome 65或以后版本浏览
  • Ubuntu 18.04 +Nvidia gtx 1650 显卡驱动安装

    1 Adding this PPA to your system You can update your system with unsupported packages from this untrusted PPA by adding
  • 详解https请求Nginx转发tomcat变成http问题

    概述 分享一个最近处理的nginx转发问题 xff0c 简单记录下 一 问题现象 简单架构为nginx做负载均衡 xff0c 后端用tomcat做容器 浏览器和 Nginx 之间走的 HTTPS 通讯 xff0c 而 Nginx 到 Tom
  • Zookeeper启动出现闪退问题解决

    1 检查环境变量是否配置了JAVA HOME xff0c 若是没有配置 xff0c 需配置才可以 xff08 由于zkEnv cmd文件中使用了JAVA HOME xff09 2 打开zkEnv cmd文件 xff0c 加上pause xf
  • WIN10下全新的部署和映像处理工具DISM

    DISM xff08 Deployment Image Servicing and Management xff09 就是部署映像服务和管理 DISM exe 用于安装 卸载 配置和更新脱机 Windows R 映像和脱机 Windows
  • 富文本显示不全自动省略

    使用富文本时 xff0c 文字一行 xff08 n行 xff09 显示不全 xff0c 末尾文字省略 简介 CGSize maxSize 61 CGSizeMake MAX MAXFLOAT 调整行间距 NSMutableParagraph
  • 普通用户安装管理Keepalived

    普通用户安装管理Keepalived 介绍安装授权给普通用户修改配置文件keepalived 配置检测脚本配置普通用户启动keepalived 介绍 负载均衡 Load Balance xff0c 简称LB 是一种服务或基于硬件设备等实现的
  • Arch Linux 安装小记

    Arch Linux 安装小记 这只是一篇随笔 xff0c 用来记录从全新安装 Arch Linux 开始 xff0c 到在使用过程中各种软件配置的过程 其实对于 Arch Linux 这样滚动更新的 Linux xff0c 很少需要重新安
  • Java Collections的min和max方法

    方法一 public static lt T extends Object amp Comparable lt super T gt gt T min Collection lt extends T gt coll 此方法需要传入一个实现了
  • 【高效工作】Sublime Text 3 美化

    参考 xff1a 炫酷的sublime text3主题 准备一个良好的工作环境会让人更加乐于工作 xff0c 现代的程序猿都有一颗geek的心 xff0c 谁能忍受整天在一个丑陋的UI下coding xff1f xff01 所以今天就简单介
  • oom killer &lmkd killer

    目录 oom killer amp reaper task 进程内存回收 杀进程内存回收 lmkd killer psi vmpressure 事件通知 内核psi 实现 内核vmpressure oom killer amp reaper
  • O 上新增 TaskSnapshot

    任务快照 https source android google cn devices tech perf task snapshots examples and source android P https developer andro