binder service 找不到会delay 5秒

一. 描述

  在做项目裁剪时,发现了一个问题. 当按power 时,灭屏和亮屏特别慢. 至少需要5秒.

 01-11 14:16:24.533  1027  1130 I DisplayPowerController2[0]: Unblocked screen on after 6256 ms

二.分析

     抓取system server的dump 信息.

    发现一直处于blocked 状态.

"android.display" prio=5 tid=16 Blocked
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x14015f28 self=0xe0a11810
  | sysTid=1099 nice=-10 cgrp=top-app sched=0/0 handle=0x9ffcfdc0
  | state=S schedstat=( 1465571455 89478292 1297 ) utm=112 stm=33 core=3 HZ=100
  | stack=0x9fecd000-0x9fecf000 stackSize=1035KB
  | held mutexes=
  at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:6085)
  - waiting to lock <0x0d159276> (a com.android.server.wm.WindowManagerGlobalLock) held by thread 45
  at android.os.Handler.dispatchMessage(Handler.java:107)
  at android.os.Looper.loopOnce(Looper.java:232)
  at android.os.Looper.loop(Looper.java:317)
  at android.os.HandlerThread.run(HandlerThread.java:85)
  at com.android.server.ServiceThread.run(ServiceThread.java:46)
DumpLatencyMs: 142.644

"android.anim" prio=5 tid=17 Blocked
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x14016228 self=0xe0a12610
  | sysTid=1100 nice=-10 cgrp=top-app sched=0/0 handle=0x9fec6dc0
  | state=S schedstat=( 1362154342 128365605 742 ) utm=119 stm=16 core=5 HZ=100
  | stack=0x9fdc4000-0x9fdc6000 stackSize=1035KB
  | held mutexes=
  at com.android.server.wm.InputMonitor$UpdateInputWindows.run(InputMonitor.java:120)
  - waiting to lock <0x0d159276> (a com.android.server.wm.WindowManagerGlobalLock) held by thread 45
  at android.os.Handler.handleCallback(Handler.java:959)
  at android.os.Handler.dispatchMessage(Handler.java:100)
  at android.os.Looper.loopOnce(Looper.java:232)
  at android.os.Looper.loop(Looper.java:317)
  at android.os.HandlerThread.run(HandlerThread.java:85)
  at com.android.server.ServiceThread.run(ServiceThread.java:46)
DumpLatencyMs: 143.758

找到tid 45,此线程处于sleep状态..

"PowerManagerService" prio=5 tid=45 Native
  | group="main" sCount=1 ucsCount=0 flags=1 obj=0x141381e8 self=0xe0a2bc10
  | sysTid=1130 nice=-10 cgrp=foreground sched=0/0 handle=0x9dd15dc0
  | state=S schedstat=( 2188426458 483786207 3444 ) utm=168 stm=50 core=7 HZ=100
  | stack=0x9dc13000-0x9dc15000 stackSize=1035KB
  | held mutexes=
  native: #00 pc 000844ac  /apex/com.android.runtime/lib/bionic/libc.so (nanosleep+12) (BuildId: e535d012c74271562a14ebfcf0d2c5b6)
  native: #01 pc 0004cb41  /apex/com.android.runtime/lib/bionic/libc.so (usleep+52) (BuildId: e535d012c74271562a14ebfcf0d2c5b6)
  native: #02 pc 0004a023  /system/lib/libbinder.so (android::ServiceManagerShim::getService const+362) (BuildId: 0c89e7b8d50c92ea17729fd0f466d429)
  native: #03 pc 00009519  /system/lib/libbinder_ndk.so (AServiceManager_getService+56) (BuildId: 22f3579865f7d1060750c3484bcf7134)
  native: #04 pc 0000669d  /system_ext/lib/libpowerhalwrap.so (applistNotifyForegroundApp+156) (BuildId: bc3adcbf66c1d7c215e44f0d0c99c0af)
  native: #05 pc 00004979  /system_ext/lib/libpowerhalwrap.so (PowerHal_Wrap_notifyAppState+68) (BuildId: bc3adcbf66c1d7c215e44f0d0c99c0af)
  native: #06 pc 000023bb  /system_ext/lib/libpowerhalwrap_jni.so (android::com_mediatek_powerhalwrapper_PowerHalWrapper_nativeNotifyAppState+118) (BuildId: afb8bcc45ef0cfd351be87de2e74af8d)
  native: #07 pc 000ab9ad  /apex/com.android.art/lib/libart.so (art_quick_generic_jni_trampoline+44) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #08 pc 0009ff5c  /apex/com.android.art/lib/libart.so (nterp_helper+2124) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #09 pc 00040a86  /system_ext/framework/mediatek-framework.jar (com.mediatek.powerhalwrapper.PowerHalWrapper.amsBoostNotify+170)
  native: #10 pc 000a0908  /apex/com.android.art/lib/libart.so (nterp_helper+4600) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #11 pc 0003a068  /system_ext/framework/mediatek-services.jar (com.mediatek.server.powerhal.PowerHalManagerImpl.amsBoostNotify+16)
  native: #12 pc 000a0908  /apex/com.android.art/lib/libart.so (nterp_helper+4600) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #13 pc 0002c608  /system_ext/framework/mediatek-services.jar (com.mediatek.server.am.AmsExtImpl.amsBoostNotify+24)
  native: #14 pc 000a0908  /apex/com.android.art/lib/libart.so (nterp_helper+4600) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #15 pc 0002cafa  /system_ext/framework/mediatek-services.jar (com.mediatek.server.am.AmsExtImpl.onActivityStateChanged+246)
  native: #16 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #17 pc 0041a0e0  /system/framework/services.jar (com.android.server.wm.ActivityRecord.scheduleTopResumedActivityChanged+208)
  native: #18 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #19 pc 004438e6  /system/framework/services.jar (com.android.server.wm.ActivityTaskSupervisor.scheduleTopResumedActivityStateIfNeeded+18)
  native: #20 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #21 pc 00440d0a  /system/framework/services.jar (com.android.server.wm.ActivityTaskSupervisor.updateTopResumedActivityIfNeeded+102)
  native: #22 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #23 pc 004c1396  /system/framework/services.jar (com.android.server.wm.TaskFragment.setResumedActivity+154)
  native: #24 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #25 pc 004c0ac2  /system/framework/services.jar (com.android.server.wm.TaskFragment.onActivityStateChanged+166)
  native: #26 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #27 pc 00425cd8  /system/framework/services.jar (com.android.server.wm.ActivityRecord.setState+172)
  native: #28 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #29 pc 004be3d8  /system/framework/services.jar (com.android.server.wm.TaskFragment.resumeTopActivity+2008)
  native: #30 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #31 pc 004ca890  /system/framework/services.jar (com.android.server.wm.Task.resumeTopActivityInnerLocked+68)
  native: #32 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #33 pc 004ca916  /system/framework/services.jar (com.android.server.wm.Task.resumeTopActivityUncheckedLocked+42)
  native: #34 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #35 pc 004ca97a  /system/framework/services.jar (com.android.server.wm.Task.resumeTopActivityUncheckedLocked+142)
  native: #36 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #37 pc 004ca8d2  /system/framework/services.jar (com.android.server.wm.Task.resumeTopActivityUncheckedLocked+2)
  native: #38 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #39 pc 004a5eba  /system/framework/services.jar (com.android.server.wm.RootWindowContainer.lambda$applySleepTokens$20+74)
  native: #40 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #41 pc 004a4f28  /system/framework/services.jar (com.android.server.wm.RootWindowContainer.$r8$lambda$NhxPh5Vwt0h9VdHWsjHQElBK_mw)
  native: #42 pc 0009f748  /apex/com.android.art/lib/libart.so (nterp_helper+56) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #43 pc 004a1440  /system/framework/services.jar (com.android.server.wm.RootWindowContainer$$ExternalSyntheticLambda7.accept+16)
  native: #44 pc 000a0bac  /apex/com.android.art/lib/libart.so (nterp_helper+5276) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #45 pc 004cf350  /system/framework/services.jar (com.android.server.wm.Task.forAllRootTasks+12)
  native: #46 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #47 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #48 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #49 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #50 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #51 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #52 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #53 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #54 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #55 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #56 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #57 pc 004e90f8  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+40)
  native: #58 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #59 pc 004e90b6  /system/framework/services.jar (com.android.server.wm.WindowContainer.forAllRootTasks+2)
  native: #60 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #61 pc 004a5460  /system/framework/services.jar (com.android.server.wm.RootWindowContainer.applySleepTokens+268)
  native: #62 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #63 pc 0043eb86  /system/framework/services.jar (com.android.server.wm.ActivityTaskManagerService.updateSleepIfNeededLocked+102)
  native: #64 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #65 pc 004a7880  /system/framework/services.jar (com.android.server.wm.RootWindowContainer.removeSleepToken+296)
  native: #66 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #67 pc 00434b30  /system/framework/services.jar (com.android.server.wm.ActivityTaskManagerService$SleepTokenAcquirerImpl.release+44)
  native: #68 pc 000a0bac  /apex/com.android.art/lib/libart.so (nterp_helper+5276) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #69 pc 002c8b6a  /system/framework/services.jar (com.android.server.policy.PhoneWindowManager.updateScreenOffSleepToken+22)
  native: #70 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #71 pc 002c7a3e  /system/framework/services.jar (com.android.server.policy.PhoneWindowManager.screenTurningOn+90)
  native: #72 pc 000a1290  /apex/com.android.art/lib/libart.so (nterp_helper+7040) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #73 pc 004de97c  /system/framework/services.jar (com.android.server.display.DisplayPowerController.setScreenState+540)
  native: #74 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #75 pc 004de746  /system/framework/services.jar (com.android.server.display.DisplayPowerController.setScreenState+2)
  native: #76 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #77 pc 004dfa1e  /system/framework/services.jar (com.android.server.display.DisplayPowerController.animateScreenStateChange+198)
  native: #78 pc 0205d8e9  /memfd:jit-cache (deleted) (offset 2000000) (com.android.server.display.DisplayPowerController.updatePowerStateInternal+768)
  native: #79 pc 000a026c  /apex/com.android.art/lib/libart.so (nterp_helper+2908) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #80 pc 004e2294  /system/framework/services.jar (com.android.server.display.DisplayPowerController.updatePowerState+16)
  native: #81 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #82 pc 004df0c4  /system/framework/services.jar (com.android.server.display.DisplayPowerController.-$$Nest$mupdatePowerState)
  native: #83 pc 0009f748  /apex/com.android.art/lib/libart.so (nterp_helper+56) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #84 pc 004dde2a  /system/framework/services.jar (com.android.server.display.DisplayPowerController$DisplayControllerHandler.handleMessage+734)
  native: #85 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #86 pc 001e510e  /system/framework/framework.jar (android.os.Handler.dispatchMessage+42)
  native: #87 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #88 pc 00209034  /system/framework/framework.jar (android.os.Looper.loopOnce+348)
  native: #89 pc 0009f748  /apex/com.android.art/lib/libart.so (nterp_helper+56) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #90 pc 00209698  /system/framework/framework.jar (android.os.Looper.loop+68)
  native: #91 pc 0009f748  /apex/com.android.art/lib/libart.so (nterp_helper+56) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #92 pc 001e4750  /system/framework/framework.jar (android.os.HandlerThread.run+56)
  native: #93 pc 000a0200  /apex/com.android.art/lib/libart.so (nterp_helper+2800) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #94 pc 00210594  /system/framework/services.jar (com.android.server.ServiceThread.run+24)
  native: #95 pc 000a4575  /apex/com.android.art/lib/libart.so (art_quick_invoke_stub_internal+68) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #96 pc 005a0415  /apex/com.android.art/lib/libart.so (art_quick_invoke_stub+248) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #97 pc 0020538d  /apex/com.android.art/lib/libart.so (art::ArtMethod::Invoke+120) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #98 pc 0050c8dd  /apex/com.android.art/lib/libart.so (art::Thread::CreateCallback+1120) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #99 pc 0050c473  /apex/com.android.art/lib/libart.so (art::Thread::CreateCallbackWithUffdGc+2) (BuildId: 2243dd14e630b8abbd0214fb0ae595f2)
  native: #100 pc 0004469b  /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start+40) (BuildId: e535d012c74271562a14ebfcf0d2c5b6)
  native: #101 pc 0003b5cf  /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: e535d012c74271562a14ebfcf0d2c5b6)
  at com.mediatek.powerhalwrapper.PowerHalWrapper.nativeNotifyAppState(Native method)
  at com.mediatek.powerhalwrapper.PowerHalWrapper.amsBoostNotify(PowerHalWrapper.java:686)
  at com.mediatek.server.powerhal.PowerHalManagerImpl.amsBoostNotify(PowerHalManagerImpl.java:144)
  at com.mediatek.server.am.AmsExtImpl.amsBoostNotify(AmsExtImpl.java:492)
  at com.mediatek.server.am.AmsExtImpl.onActivityStateChanged(AmsExtImpl.java:479)
  at com.android.server.wm.ActivityRecord.scheduleTopResumedActivityChanged(ActivityRecord.java:1546)
  at com.android.server.wm.ActivityTaskSupervisor.scheduleTopResumedActivityStateIfNeeded(ActivityTaskSupervisor.java:2359)
  at com.android.server.wm.ActivityTaskSupervisor.updateTopResumedActivityIfNeeded(ActivityTaskSupervisor.java:2328)
  at com.android.server.wm.TaskFragment.setResumedActivity(TaskFragment.java:614)
  at com.android.server.wm.TaskFragment.onActivityStateChanged(TaskFragment.java:967)
  at com.android.server.wm.ActivityRecord.setState(ActivityRecord.java:6042)
  at com.android.server.wm.TaskFragment.resumeTopActivity(TaskFragment.java:1605)
  at com.android.server.wm.Task.resumeTopActivityInnerLocked(Task.java:5230)
  at com.android.server.wm.Task.resumeTopActivityUncheckedLocked(Task.java:5160)
  at com.android.server.wm.Task.resumeTopActivityUncheckedLocked(Task.java:5179)
  at com.android.server.wm.Task.resumeTopActivityUncheckedLocked(Task.java:5211)
  at com.android.server.wm.RootWindowContainer.lambda$applySleepTokens$20(RootWindowContainer.java:2633)
  at com.android.server.wm.RootWindowContainer.$r8$lambda$NhxPh5Vwt0h9VdHWsjHQElBK_mw(RootWindowContainer.java:0)
  at com.android.server.wm.RootWindowContainer$$ExternalSyntheticLambda7.accept(R8$$SyntheticClass:0)
  at com.android.server.wm.Task.forAllRootTasks(Task.java:3172)
  at com.android.server.wm.WindowContainer.forAllRootTasks(WindowContainer.java:2216)
  at com.android.server.wm.WindowContainer.forAllRootTasks(WindowContainer.java:2216)
  at com.android.server.wm.WindowContainer.forAllRootTasks(WindowContainer.java:2216)
  ... repeated 2 times
  at com.android.server.wm.WindowContainer.forAllRootTasks(WindowContainer.java:2209)
  at com.android.server.wm.RootWindowContainer.applySleepTokens(RootWindowContainer.java:2618)
  at com.android.server.wm.ActivityTaskManagerService.updateSleepIfNeededLocked(ActivityTaskManagerService.java:5124)
  at com.android.server.wm.RootWindowContainer.removeSleepToken(RootWindowContainer.java:2896)
  at com.android.server.wm.ActivityTaskManagerService$SleepTokenAcquirerImpl.release(ActivityTaskManagerService.java:5096)
  - locked <0x0d159276> (a com.android.server.wm.WindowManagerGlobalLock)
  at com.android.server.policy.PhoneWindowManager.updateScreenOffSleepToken(PhoneWindowManager.java:6297)
  at com.android.server.policy.PhoneWindowManager.screenTurningOn(PhoneWindowManager.java:5787)
  at com.android.server.display.DisplayPowerController.setScreenState(DisplayPowerController.java:2200)
  at com.android.server.display.DisplayPowerController.setScreenState(DisplayPowerController.java:2115)
  at com.android.server.display.DisplayPowerController.animateScreenStateChange(DisplayPowerController.java:2307)
  at com.android.server.display.DisplayPowerController.updatePowerStateInternal(DisplayPowerController.java:1353)
  at com.android.server.display.DisplayPowerController.updatePowerState(DisplayPowerController.java:1272)
  at com.android.server.display.DisplayPowerController.-$$Nest$mupdatePowerState(DisplayPowerController.java:0)
  at com.android.server.display.DisplayPowerController$DisplayControllerHandler.handleMessage(DisplayPowerController.java:2954)
  at android.os.Handler.dispatchMessage(Handler.java:107)
  at android.os.Looper.loopOnce(Looper.java:232)
  at android.os.Looper.loop(Looper.java:317)
  at android.os.HandlerThread.run(HandlerThread.java:85)
  at com.android.server.ServiceThread.run(ServiceThread.java:46)
DumpLatencyMs: 198.162

三,查看源码

frameworks/native/libs/binder/IServiceManager.cpp


// This implementation could be simplified and made more efficient by delegating
// to waitForService. However, this changes the threading structure in some
// cases and could potentially break prebuilts. Once we have higher logistical
// complexity, this could be attempted.
sp ServiceManagerShim::getService(const String16& name) const
{
    static bool gSystemBootCompleted = false;

    sp svc = checkService(name);

    //若service找到就直接返回.
    if (svc != nullptr) return svc;

    const bool isVendorService =
        strcmp(ProcessState::self()->getDriverName().c_str(), "/dev/vndbinder") == 0;

    //等待超时时间为5秒
    constexpr int64_t timeout = 5000;
    int64_t startTime = uptimeMillis();
    // Vendor code can't access system properties
    if (!gSystemBootCompleted && !isVendorService) {
#ifdef __ANDROID__
        char bootCompleted[PROPERTY_VALUE_MAX];
        property_get("sys.boot_completed", bootCompleted, "0");
        gSystemBootCompleted = strcmp(bootCompleted, "1") == 0 ? true : false;
#else
        gSystemBootCompleted = true;
#endif
    }
    // retry interval in millisecond; note that vendor services stay at 100ms
    const useconds_t sleepTime = gSystemBootCompleted ? 1000 : 100;

    ALOGI("Waiting for service '%s' on '%s'...", String8(name).c_str(),
          ProcessState::self()->getDriverName().c_str());

    int n = 0;
    while (uptimeMillis() - startTime < timeout) {
        n++;
        usleep(1000*sleepTime);

        //检查service 是否存在

        sp svc = checkService(name);

        //若找不到服务,则继续等待,再次找service
        if (svc != nullptr) {
            ALOGI("Waiting for service '%s' on '%s' successful after waiting %" PRIi64 "ms",
                  String8(name).c_str(), ProcessState::self()->getDriverName().c_str(),
                  uptimeMillis() - startTime);
            return svc;
        }
    }
    ALOGW("Service %s didn't start. Returning NULL", String8(name).c_str());
    return nullptr;
}
 

四.总结

 若service 已经裁剪,需要检查此service调用,应该避免此service 调用.

你可能感兴趣的:(framework,基础知识点,android)