Monkey 导致android.anim动画线程遍历windows超时

通过查看db.fatal.00.SWT.dbg 发现

Exception Class: SWT
Exception Type: system_server_watchdog

Current Executing Process: 
system_server

主线程中locked by thread 117
"main" prio=5 tid=1 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x74f94f18 self=0xafe48000
  | sysTid=922 nice=-2 cgrp=default sched=0/0 handle=0xb3e20494
  | state=S schedstat=( 719579631019 1292329548899 3095308 ) utm=43397 stm=28560 core=3 HZ=100
  | stack=0xbe647000-0xbe649000 stackSize=8MB
  | held mutexes=
  at com.android.server.am.ActivityManagerService.isAppStartModeDisabled(ActivityManagerService.java:9390)
  - waiting to lock <0x0704493d> (a com.android.server.am.ActivityManagerService) held by thread 117
  at com.android.server.AlarmManagerService.setImplLocked(AlarmManagerService.java:1634)
  at com.android.server.AlarmManagerService.setImpl(AlarmManagerService.java:1619)
  - locked <0x0e698cfa> (a java.lang.Object)
  at com.android.server.AlarmManagerService$2.set(AlarmManagerService.java:1892)

....

"Binder:922_17" prio=5 tid=117 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x13e82580 self=0x946a3c00
  | sysTid=13061 nice=0 cgrp=default sched=0/0 handle=0x8bf7f970
  | state=S schedstat=( 1665369513889 1285481407782 4824718 ) utm=116042 stm=50494 core=2 HZ=100
  | stack=0x8be84000-0x8be86000 stackSize=1010KB
  | held mutexes=
  at com.android.server.am.ActivityManagerService.getActivityOptions(ActivityManagerService.java:14434)
  - waiting to lock <0x0704493d> (a com.android.server.am.ActivityManagerService) held by thread 98
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2325)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3344)
  at android.os.Binder.execTransact(Binder.java:731)

.......


"Binder:922_E" prio=5 tid=98 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x13e82160 self=0x95e5c000
  | sysTid=3489 nice=-2 cgrp=default sched=0/0 handle=0x91a51970
  | state=S schedstat=( 1861049434936 1371686857656 5709595 ) utm=128037 stm=58067 core=2 HZ=100
  | stack=0x91956000-0x91958000 stackSize=1010KB
  | held mutexes=
  at com.android.server.wm.WindowManagerService.containsDismissKeyguardWindow(WindowManagerService.java:2949)
  - waiting to lock <0x041762ac> (a com.android.server.wm.WindowHashMap) held by thread 30
  at com.android.server.am.ActivityRecord.hasDismissKeyguardWindows(ActivityRecord.java:1357)
  at com.android.server.am.ActivityStack.checkKeyguardVisibility(ActivityStack.java:2033)
  at com.android.server.am.ActivityStack.ensureActivitiesVisibleLocked(ActivityStack.java:1895)
  at com.android.server.am.ActivityStackSupervisor.ensureActivitiesVisibleLocked(ActivityStackSupervisor.java:3708)
  at com.android.server.am.ActivityStackSupervisor.ensureActivitiesVisibleLocked(ActivityStackSupervisor.java:3692)
  at com.android.server.am.ActivityStackSupervisor.reportResumedActivityLocked(ActivityStackSupervisor.java:3647)
  at com.android.server.am.ActivityRecord.completeResumeLocked(ActivityRecord.java:1867)
  at com.android.server.am.ActivityStack.minimalResumeActivityLocked(ActivityStack.java:1256)
  at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1602)
  at com.android.server.am.ActivityStackSupervisor.attachApplicationLocked(ActivityStackSupervisor.java:989)
  at com.android.server.am.ActivityManagerService.attachApplicationLocked(ActivityManagerService.java:7946)
  at com.android.server.am.ActivityManagerService.attachApplication(ActivityManagerService.java:8014)
  - locked <0x0704493d> (a com.android.server.am.ActivityManagerService)
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:198)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3344)
  at android.os.Binder.execTransact(Binder.java:731)

..........

...

"android.anim" prio=5 tid=30 Runnable
  | group="main" sCount=0 dsCount=0 flags=0 obj=0x13a40ef0 self=0x97369000
  | sysTid=979 nice=-4 cgrp=default sched=0/0 handle=0x96f6d970
  | state=R schedstat=( 8341253325637 2771788113085 4989125 ) utm=773245 stm=60880 core=0 HZ=100
  | stack=0x96e6a000-0x96e6c000 stackSize=1042KB
  | held mutexes= "mutator lock"(shared held)
  at com.android.server.wm.SurfaceAnimator.hasLeash(SurfaceAnimator.java:209)
  at com.android.server.wm.WindowContainer.prepareSurfaces(WindowContainer.java:1086)
  at com.android.server.wm.AppWindowToken.prepareSurfaces(AppWindowToken.java:2172)
  at com.android.server.wm.WindowContainer.prepareSurfaces(WindowContainer.java:1088)
  at com.android.server.wm.Task.prepareSurfaces(Task.java:698)
  at com.android.server.wm.WindowContainer.prepareSurfaces(WindowContainer.java:1088)
  at com.android.server.wm.TaskStack.prepareSurfaces(TaskStack.java:1815)
  at com.android.server.wm.WindowContainer.prepareSurfaces(WindowContainer.java:1088)
  at com.android.server.wm.WindowContainer.prepareSurfaces(WindowContainer.java:1088)
  at com.android.server.wm.DisplayContent.prepareSurfaces(DisplayContent.java:4019)
  at com.android.server.wm.DisplayContent.applySurfaceChangesTransaction(DisplayContent.java:2925)
  at com.android.server.wm.RootWindowContainer.applySurfaceChangesTransaction(RootWindowContainer.java:852)
  at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:596)
  at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:207)
  at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:155)
  at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:145)
  at com.android.server.wm.WindowSurfacePlacer.lambda$new$0(WindowSurfacePlacer.java:118)
  - locked <0x041762ac> (a com.android.server.wm.WindowHashMap)
  at com.android.server.wm.-$$Lambda$WindowSurfacePlacer$4Hbamt-LFcbu8AoZBoOZN_LveKQ.run(lambda:-1)
  at android.os.Handler.handleCallback(Handler.java:873)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:193)
  at android.os.HandlerThread.run(HandlerThread.java:65)
  at com.android.server.ServiceThread.run(ServiceThread.java:44)
android.anim动画线程遍历windows超时, 这是android O就存在的google原生bug
从DUMPSYS_SURFACEFLINGER中s搜索"BufferLayer (AppWindowToken"出现了669个AppWindowToken,对应669个window,
mtk给的数据是平均每个window 的动画耗时0.179s,如果全部遍历完需要120s,
因此会遍历超时出现swt。
这种情况只有LaunchMode = SingleTask时会多次创建同一名字的Activity。
查看这种重名的activity最多的主要是下面三个activity,占到了三分之二的window都是下面这三个activity对应的。
com.android.mms/.ui.ComposeMessageActivity
com.android.email/.activity.Welcome
com.android.email/.activity.setup.AccountSetupFinal
需要改动这三个activity的LaunchMode
frameworks/base/services/core/java/com/android/server/am/ActivityStarter.java
private int startActivity(......){
....
  startActivityUnchecked(.......);
....
}
private int startActivityUnchecked(.......){
....
....
   computeSourceStack();
....
}

private void computeSourceStack() {
....
        // If the source is finishing, we can't further count it as our source. This is because the
        // task it is associated with may now be empty and on its way out, so we don't want to
        // blindly throw it in to that task.  Instead we will take the NEW_TASK flow and try to find
        // a task for it. But save the task information so it can be used when creating the new task.
....
        if ((mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) == 0) {
            Slog.w(TAG, "startActivity called from finishing " + mSourceRecord
                    + "; forcing " + "Intent.FLAG_ACTIVITY_NEW_TASK for: " + mIntent);
....
 mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
 //add start
 if(mService.isUserInMonkey()){
                mLaunchFlags |= FLAG_ACTIVITY_CLEAR_TASK;
 }
 //add end
mNewTaskInfo = mSourceRecord.info;
.......

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值