SystemUI-uiautotest-case

日志开启和过滤

// 开启追踪,仅追踪 SystemUI 进程(property 在进程启动时读取一次)
adb shell setprop debug.animator.trace com.android.systemui
 
// 重启 SystemUI 使配置生效(property 在进程启动时读取一次)
adb shell kill $(adb shell pidof com.android.systemui)
 
// 验证 Logcat 输出,同时看 Folme 和原生 Animator 日志
adb shell setprop debug.folme.trace 1
adb shell kill $(adb shell pidof com.android.systemui)
adb logcat -s AnimatorTracer:I FolmeTracer:I

线上已进版数据

⛱️ 默认主题下执行的自动化测试

888-锁屏页面亮灭屏:

  1. 前面部分都是状态栏相关的

421-联动模式假AOD系统内亮灭屏:

  1. 景深扣图 alpha 动画 - KeyguardAnim-DepthAlpha - 本次添加
  2. 景深扣图 transitionAlpha 动画 & 全屏 aod 亮灭屏场景 - KeyguardAnim-DepthTransitionAlpha - 本次添加

422-非联动模式系统内灭屏:

423-全屏 AOD 解锁后灭屏亮屏:

  1. 时钟 AOD 动画,是否需要删除,也包含时钟的联动

  2. 全屏 AOD 相关,涉及动画较多,需要确认补充哪些

    1. doWallpaperBlackAnim - 已进版
    2. doWallpaperScaleAnim - 已进版,本次修改名称 - KeyguardAnim-FullAodScale
    3. 景深扣图 Alpha 动画 - KeyguardAnim-DepthTransitionAlpha - 本次添加
    4. doHideKeyguardViewAnim - 已进版
    5. animateFullAod - 状态栏动画,不处理 keyguardStatusBarViewControllerInject.animateFullAod(show)
    6. translationY - KeyguardAnim-FullAodTransY - 本次添加
    7. doLinkageAnimAfterKeyguardShowing - KeyguardAnim-FullAodShow - 本次添加
    8. doKeyguardSignatureLayerAnim - KeyguardAnim-SignatureLayerAlpha - 本次添加
    9. doSignatureAlphaAnim - KeyguardAnim-SignatureAlpha - 本次添加
    10. doSignatureColorAnim - KeyguardAnim-SignatureColor - 本次添加
    11. setRowFullAodStyle - 通知动画,不处理
    12. startNotificationWakeAnimation - 通知动画,不处理
    13. AOD 时钟颜色变化:Keyguard#AodClockColor - 本次添加

424-灭屏到假全屏AOD,到真AOD:

425-联动模式真AOD到锁屏页面:

  1. 景深扣图避让 Alpha 动画:KeyguardAnim-DepthAvoidAlpha - 本次添加
  2. AOD 进入动画-容器 Alpha:Keyguard#AodEnter-ContainerAlpha - 本次添加
  3. AOD 进入动画-时钟 HUE:Keyguard#AodEnter-HueIn - 本次添加
  4. AOD 进入动画-签名 alpha:Keyguard#AodEnter-SignatureAlpha - 本次添加

Bug 1: 亮灭屏时钟动画,逐帧触发签名动画,以及没有设置签名(不可见)时,是否需要触发动画?

┌── Folme Animation Begin ──────────────────────────
│ ID: 1845
│ Tag: show
│ Target: View{#9571329 valid {7f0b0ab1 app:id/signature_text/miuix.androidbasewidget.widget.ClearableEditText}}
│ Properties:
│   alpha: 0 → 1
│ Ease: decelerate, factors=[1.5]
│ Delay: 0ms
│ CallStack:
│   at miuix.animation.internal.FolmeEngine.fromTo(FolmeEngine.java:264)
│   at miuix.animation.FolmeFactory.fromToState(FolmeFactory.java:30)
│   at miuix.animation.controller.FolmeState.doFromTo(FolmeState.java:88)
│   at miuix.animation.controller.FolmeState.access$200(FolmeState.java:26)
│   at miuix.animation.controller.FolmeState$7.run(FolmeState.java:320)
│   at miuix.animation.ViewTarget.executeTask(ViewTarget.java:405)
│   at miuix.animation.ViewTarget.post(ViewTarget.java:399)
│   at miuix.animation.controller.FolmeState.to(FolmeState.java:317)
│   at com.android.keyguard.clock.animation.ColorAnimationBaseClock.doSignatureViewAnim(ColorAnimationBaseClock.kt:594)
│   at com.android.keyguard.clock.animation.allinone.AllInOneClockAnimation.updateClockStyle(AllInOneClockAnimation.kt:398)
│   at com.android.keyguard.clock.animation.allinone.AllInOneClockAnimation.access$updateClockStyle(AllInOneClockAnimation.kt:25)
│   at com.android.keyguard.clock.animation.allinone.AllInOneClockAnimation$folmeClockListener$1.onUpdate(AllInOneClockAnimation.kt:62)
│   at miuix.animation.listener.ListenerNotifier$UpdateNotifier.doNotify(ListenerNotifier.java:63)
│   at miuix.animation.listener.ListenerNotifier.notifyListenerSet(ListenerNotifier.java:155)
│   at miuix.animation.listener.ListenerNotifier.notify(ListenerNotifier.java:144)
└──────────────────────────────────────────────────

Bug 2: 取色动画空跑

┌── Folme Animation Begin ──────────────────────────
│ ID: 1942
│ Tag: defaultTo
│ Target: Value{valid ValueTargetObject@2006752162{fractionAnimation}}
│ Properties:
│   fraction: 0 → 1
│ Ease: spring_phy, factors=[1.0, 0.3499999940395355, 1.0]
│ Delay: 0ms
│ CallStack:
│   at miuix.animation.internal.FolmeEngine.fromTo(FolmeEngine.java:264)
│   at miuix.animation.FolmeFactory.fromToState(FolmeFactory.java:30)
│   at miuix.animation.controller.FolmeState.doFromTo(FolmeState.java:88)
│   at miuix.animation.controller.FolmeState.access$200(FolmeState.java:26)
│   at miuix.animation.controller.FolmeState$7.run(FolmeState.java:320)
│   at miuix.animation.IAnimTarget.post(IAnimTarget.java:369)
│   at miuix.animation.controller.FolmeState.to(FolmeState.java:317)
│   at com.android.keyguard.clock.animation.allinone.AllInOneBaseAnimation.runColorAnimation(AllInOneBaseAnimation.kt:167)
│   at com.android.keyguard.clock.animation.allinone.AllInOneBaseAnimation.handleEffectAnimation(AllInOneBaseAnimation.kt:140)
│   at com.android.keyguard.clock.animation.allinone.AllInOneBaseAnimation.doColorExtractionAnimation(AllInOneBaseAnimation.kt:89)
│   at com.android.keyguard.clock.animation.allinone.AllInOneBaseAnimation.doColorExtractionAnimation(AllInOneBaseAnimation.kt:15)
│   at com.android.keyguard.clock.animation.AnimationHelper.doColorExtractionAnimation(AnimationHelper.java:547)
│   at com.android.keyguard.clock.KeyguardClockContainer.setExtractedColors(KeyguardClockContainer.kt:881)
│   at com.android.keyguard.injector.KeyguardClockInjector$triggerColorExtraction$1$1$1.invokeSuspend(KeyguardClockInjector.kt:213)
│   at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
└──────────────────────────────────────────────────

其他补充

景深避让 Alpha 动画空跑不出帧

锁屏图片景深 + 通知堆叠态,扣图不可见,仍有做避让动画

SignatureAodView 空跑

参考文档:SignatureAodView 动画空跑问题分析

添加在 425 case 中的三个 Trace

┌── Native Animator Begin ─────────────────────────────
│ ID: 401
│ Type: ValueAnimator
│ Duration: 2000ms
│ Properties:
│   : -180 → 0
│ Interpolator: SineEaseInOut
│ CallStack:
│   at com.miui.aod.util.ShaderUtils.hueAnimateIn(ShaderUtils.java:305)
│   at com.miui.aod.util.ShaderUtils.hueAnimateIn(ShaderUtils.java:246)
│   at com.miui.aod.util.ShaderUtils.hueAnimateIn(ShaderUtils.java:239)
│   at com.miui.aod.widget.SignatureAodView.startAnimation(SignatureAodView.java:484)
│   at com.miui.aod.AODView.startClockPanelAnimation(AODView.java:1102)
│   at com.miui.aod.DozeHost.lambda$startEnterAnim$11(DozeHost.java:953)
│   at com.miui.aod.DozeHost.$r8$lambda$RK5VK4XHijxPfsnIHn9sYSJIHH4(DozeHost.java:0)
│   at com.miui.aod.DozeHost$$ExternalSyntheticLambda15.run(R8$$SyntheticClass:0)
└───────────────────────────────────────────────────────

修改后

888

┌── Native Animator Begin ─────────────────────────────
│ ID: 986
│ Type: ValueAnimator
│ Duration: 500ms
│ Properties:
│   : 0 → 1
│ Interpolator: Linear
│ CallStack:
│   at com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositoryImpl$startTransition$2.invokeSuspend(KeyguardTransitionRepository.kt:280)
│   at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
│   at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
│   at android.os.Handler.handleCallback(Handler.java:1129)
│   at android.os.Handler.dispatchMessageImpl(Handler.java:139)
│   at android.os.Handler.dispatchMessage(Handler.java:129)
│   at android.os.Looper.loopOnce(Looper.java:315)
│   at android.os.Looper.loop(Looper.java:419)
│   at android.app.ActivityThread.main(ActivityThread.java:10633)
│   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:598)
│   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1145)
└───────────────────────────────────────────────────────

问题排查:

421 KeyguardAnim-SignatureLayerAlpha 不出帧

和 KeyguardAnim-DepthAlpha 有部分重叠,和本文档的 trace 表现一致

灭屏时 VSync-app 信号停止。

422 KeyguardAnim-SignatureLayerAlpha/KeyguardAnim-DepthAlpha不出帧,原因同 421 VSync-app 无变化

423 KeyguardAnim-SignatureLayerAlpha 待排查

424

425 Keyguard#ClockColorExtraction

去不了,动画过程中判断是否和目标颜色值一致,过程中不一定是多少帧以后才一致

888-原生动画主线程空跑,无法移除,依赖动画状态