在做项目裁剪时,发现了一个问题. 当按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.
spServiceManagerShim::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 调用.