Bug #118372

【IOVDEV-31381】【VC1】【0095】【台架】【EE环境】【副屏】05月29日下午晚上九点执行的monkey命令,05月29号晚上10:47分monkey命令自动停止了

Added by CDTS_TEST 王成 about 2 years ago. Updated almost 2 years ago.

Status:CLOSEDStart date:2023-05-30
Priority:NormalDue date:2023-06-05
Assignee:CD FW 曹覃刚% Done:

0%

Category:CD-FW
Target version:-
Need_Info:TEST Found Version:01.00.0095.c103
Resolution:-- Degrated:--
Severity:Major Verified Version:
Reproducibility:Occasionally Fixed Version:
Test Type:ST Root cause:

Description

【环境信息】EE环境

【问题出现时间】:20230527 15:28

【前提条件】:副屏上电,网络正常

【操作步骤】

1.05月29日下午晚上九点执行的monkey命令。
【实际结果】

1.05月29号晚上10:47分monkey命令自动停止了。

【期望结果】

1.monkey命令进行中状态。
【备注】:

台架Log地址:https://ofs.human-horizons.com/#/download/index/Prohe6zGLuc%3D

【当前开机次数】:副屏第135次开机

【应用版本】:/

【VIN】:HRYTTESTVINMGM401

【硬件版本号】:/
【中控版本号】:03.02.0082.C101
【副屏版本号】:01.00.0095.c103

1685514227718.zip - 5.29号18点到24点 (43.8 MB) CDTS_TEST 王成, 2023-05-31 14:25


Related issues

Related to Figure - Bug #118461: 【IOVDEV-32260】【内部】【VC1】【0100】【台架】【EE环境】【副屏】monkey异常中断 CLOSED 2023-06-02

History

#2 Updated by CD FW 曹覃刚 about 2 years ago

  • Category changed from CD-FW to 依赖客户及其供应商解决
  • Status changed from New to NEED_INFO
  • Assignee changed from CD FW 曹覃刚 to CDTS_TEST 王成

Hi 王成
客户抓的日志是05/30号的实时日志,已经是第二天的日志了
请帮忙抓取历史日志,谢谢
已飞书同步此消息

#3 Updated by CDTS_TEST 王成 about 2 years ago

  • File 1685514227718.zip added
  • Status changed from NEED_INFO to ASSIGNED
  • Assignee changed from CDTS_TEST 王成 to CD FW 曹覃刚

#4 Updated by CD FW 曹覃刚 about 2 years ago

  • Status changed from ASSIGNED to NEED_INFO
  • Assignee changed from CD FW 曹覃刚 to CDTS_TEST 王成

Hi 王成
-----------------
05-29 22:47:09.466 18178 18178 I Monkey : Sleeping for 500 milliseconds
//最后一条monkey日志

05-29 22:47:09.486 18123 18125 I adbd : persist.adb.tls_server.enable changed to 0
05-29 22:47:09.486 18123 18125 I adbd : adb wifi stopped
//wifi adb 断了

05-29 22:47:09.528 0 0 I [34989.348005] libprocessgroup: Successfully killed process cgroup uid 0 pid 18123 in 32ms
05-29 22:47:09.533 0 0 I [34989.349623] init: Service 'adbd' (pid 18123) received signal 9
//adb 进程没了
-----------------
看日志应该是由于wifi adb断了,所以monkey停了
并无其他异常发生
请同步此信息给客户,谢谢

#5 Updated by CDTS-TEST 周婷 about 2 years ago

  • Status changed from NEED_INFO to ASSIGNED
  • Assignee changed from CDTS_TEST 王成 to CD LC 陶洪普

洪普,请帮忙分析wifi adb 断掉的原因,日志中是否有wifi 断开信息,

#6 Updated by CDTS-TEST 周婷 about 2 years ago

  • Due date set to 2023-06-05

#7 Updated by 短距组_SSRDCNJ 王孟伟 about 2 years ago

【Summary】
//Monkey测试中下发touch事件,touch屏幕坐标为(1532.0,240.0), 根据横纵坐标的大小猜测正是wifi开关的位置
05-29 22:47:09.454 18178 18178 I Monkey : :*Sending Touch (ACTION_DOWN): 0:(1532.0,240.0)*
05-29 22:47:09.460 1513 1763 I input_interaction: Interaction with: 73ef6c4 com.android.settings/com.android.settings.homepage.SettingsHomepageActivity (server), swipe-up (server), edge-swipe (server), PointerEventDispatcher0 (server),
05-29 22:47:09.461 13134 13134 D ViewTouchDebug: mView : DecorView@badc287[SettingsHomepageActivity]Receive event : MotionEvent { action=ACTION_DOWN, actionButton=0, id0=0, x0=1532.0, y0=240.0, toolType0=TOOL_TYPE_UNKNOWN, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34989273, downTime=34989273, deviceId=-1, source=0x1002, displayId=0, eventId=-403622258 }
05-29 22:47:09.463 1866 1866 D ViewTouchDebug: mView : com.android.systemui.navigationbar.NavigationBarFrame{57c62da V.E...... ......I. 0,0-2560,46 #7f0b03f2 app:id/navigation_bar_frame}Receive event : MotionEvent { action=ACTION_OUTSIDE, actionButton=0, id0=0, x0=0.0, y0=-1034.0, toolType0=TOOL_TYPE_UNKNOWN, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34989273, downTime=34989273, deviceId=-1, source=0x1002, displayId=0, eventId=1514932734 }
05-29 22:47:09.463 18178 18178 I Monkey : :*Sending Touch (ACTION_UP): 0:(1517.1094,240.35599)*

//wifi在Settings界面被关闭
05-29 22:47:09.468 1513 8206 I WifiService: setWifiEnabled package=com.android.settings uid=1000 enable=false

//wifi一系列行为被禁止或关闭
05-29 22:47:09.478 1513 1784 D WifiActiveModeWarden: Shutting down all client mode managers
05-29 22:47:09.478 1513 1784 D WifiClientModeManager[wlan0]: currentstate: ConnectModeState
05-29 22:47:09.481 1513 1513 D WifiP2pService: Wifi enabled=false
05-29 22:47:09.481 20149 20149 D BluetoothAdapterService: android.net.wifi.WIFI_STATE_CHANGED
05-29 22:47:09.482 1513 1784 D WifiClientModeManager[wlan0]: Active SubscriptionInfo list not found
05-29 22:47:09.482 1513 1784 D WifiClientModeManager[wlan0]: The target role change info null
05-29 22:47:09.482 1513 1784 D WifiClientModeManager[wlan0]: Continue to stop wifi

//wifi adb断掉
05-29 22:47:09.486 18123 18125 I adbd : persist.adb.tls_server.enable changed to 0
05-29 22:47:09.486 18123 18125 I adbd : adb wifi stopped

//wifi底层驱动断开,"reason=3"代码表示连接已断开,原因是 "deauth_leaving"
//"locally_generated=1"表示断开连接是由设备本地发起的,而不是由远程访问点发起的。
05-29 22:47:09.630 17863 17863 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid=08:79:8c:36:8a:50 reason=3 locally_generated=1

//状态获取,wifi enable为0,代表false
Line 1228: 05-29 22:47:09.694 1409 1454 D LOWI-9.0.0.87.a: [LOWIController] updateIntfState: WIFI enabled 0 mNlWifiStatus 1 mWifiStateEnabled 1

【Next Action】
综上所述,wifi开关被Monkey从Settings界面关闭,所以导致wifi断开,wiif断开的原因是Monkey的自主行为,请相关团队检查monkey脚本以及touch的坐标是否对应

#8 Updated by CDTS-TEST 周婷 about 2 years ago

  • Category changed from 依赖客户及其供应商解决 to CD-FW
  • Assignee changed from CD LC 陶洪普 to CD FW 曹覃刚

覃刚,这个能从setting 关闭这个原因再往下进行分析不?

#9 Updated by CD FW 曹覃刚 about 2 years ago

  • Status changed from ASSIGNED to NEED_INFO
  • Assignee changed from CD FW 曹覃刚 to CDTS-TEST 周婷
  • Need_Info changed from -- to TEST

Hi 周婷

覃刚,这个能从setting 关闭这个原因再往下进行分析不?

你是指monkey测试时,不让它操作设定里面的画面吗?
是的话,可以通过修改monkey测试的参数,在黑名单里加上这个应用,就不会测试setting了

#10 Updated by CDTS-TEST 周婷 about 2 years ago

  • Status changed from NEED_INFO to ASSIGNED
  • Assignee changed from CDTS-TEST 周婷 to CD SYSTEM-夏旭

请帮忙进行分析为何再settings 中关闭wifi 会导致adb -d 进程被杀掉

#11 Updated by CD SYSTEM-夏旭 about 2 years ago

1. 从log看是是要设置一个属性值

05-29 22:47:09.496 18123 18125 I adbd : Waiting for persist.adb.tls_server.enable=1

代码:

LINUX/android/system/core/adb/daemon/adb_wifi.cpp

const char kWifiPortProp[] = "service.adb.tls.port";
const char kWifiEnabledProp[] = "persist.adb.tls_server.enable";

 static void start_wifi_enabled_observer() {
std::thread([]() {
bool wifi_enabled = false;
while (true) {
std::string toggled_val = wifi_enabled ? "0" : "1";
LOG(INFO) << "Waiting for " << kWifiEnabledProp << "=" << toggled_val;
if (WaitForProperty(kWifiEnabledProp, toggled_val)) {
wifi_enabled = !wifi_enabled;
LOG(INFO) << kWifiEnabledProp << " changed to " << toggled_val;
if (wifi_enabled) {
enable_wifi_debugging();
} else {
disable_wifi_debugging();
}
}
}
}).detach();
}
#endif //__ANDROID__
} // namespace

#12 Updated by CDTS_Test 吴诗雨 about 2 years ago

  • Subject changed from 【IOVDEV-31381】【VC1】【0095】【台架】【EE环境】【副屏】05月29日下午晚上九点执行的monkey命令,05月29号晚上10:47分monkey命令自动停止了 to 【IOVDEV-31381】【IOVDEV-32260】【VC1】【0095】【台架】【EE环境】【副屏】05月29日下午晚上九点执行的monkey命令,05月29号晚上10:47分monkey命令自动停止了

#13 Updated by CD SYSTEM-夏旭 about 2 years ago

  • Subject changed from 【IOVDEV-31381】【IOVDEV-32260】【VC1】【0095】【台架】【EE环境】【副屏】05月29日下午晚上九点执行的monkey命令,05月29号晚上10:47分monkey命令自动停止了 to 【IOVDEV-31381】【VC1】【0095】【台架】【EE环境】【副屏】05月29日下午晚上九点执行的monkey命令,05月29号晚上10:47分monkey命令自动停止了

此问题的root case为 adbd被kill ,正常的关闭wifi或拔掉USB并不导致adbd被kill,其中如下关键字是个切入点,需要AF调查什么样的路径可以触发
AdbDebuggingManager: Wifi disabled. Disabling adbwifi.

从异常日志分析,异常链路如下:
wifi disable ---->> Disabling adbwifi. --->> adb wifi stopped --->> adbd killed ---->> monkey killed

目前做了如下调查

1. wifi disable引发的adb wifi stopped, 本地验证连接wifi adb后,使用下拉栏或setting界面,如下打印相同

05-28 13:04:31.194 21074 21245 I WifiService: setWifiEnabled package=com.android.settings uid=1000 enable=false
05-28 13:04:31.200 21074 21226 D WifiActiveModeWarden: Shutting down all client mode managers
05-28 13:04:31.200 21074 21226 D WifiClientModeManager[wlan0]: currentstate: ConnectModeState
05-28 13:04:31.205 21074 21074 D WifiP2pService: Wifi enabled=false
05-28 13:04:31.217 21074 21226 D WifiClientModeManager[wlan0]: Active SubscriptionInfo list not found
05-28 13:04:31.217 21074 21226 D WifiClientModeManager[wlan0]: The target role change info null
05-28 13:04:31.217 21074 21226 D WifiClientModeManager[wlan0]: Continue to stop wifi
05-28 13:04:31.220 21074 21226 D WifiClientModeManager[wlan0]: Stopping ClientModeImpl
05-28 13:04:31.222 21074 21074 D WifiP2pService: Wifi enabled=false

但未出现如下异常打印,所以并未造成adbd被kill:

05-29 22:47:09.485  1513  1513 I AdbDebuggingManager: Wifi disabled. Disabling adbwifi.
05-29 22:47:09.486 18123 18125 I adbd : persist.adb.tls_server.enable changed to 0
05-29 22:47:09.486 18123 18125 I adbd : adb wifi stopped
05-29 22:47:09.494 831 831 W : No active wlan interfaces in use! Using default
05-29 22:47:09.496 18123 18125 I adbd : Waiting for persist.adb.tls_server.enable=1
05-29 22:47:09.497 0 0 I [34989.315908] init: Sending signal 9 to service 'adbd' (pid 18123) process group...

其中如下关键字是个切入点,需要调AF查什么样的路径可以触发
AdbDebuggingManager: Wifi disabled. Disabling adbwifi.

1.1. 发现在下面的java文件会去设备属性persist.adb.tls_server.enable

1.1.1. AdbService.java
SystemProperties.get(WIFI_PERSISTENT_CONFIG_PROPERTY, "0")); in initAdbState()
private static final String WIFI_PERSISTENT_CONFIG_PROPERTY = "persist.adb.tls_server.enable"; field in AdbService
SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); in setAdbEnabled()
1.1.2. AdbDebuggingManager.java
private static final String WIFI_PERSISTENT_CONFIG_PROPERTY ="persist.adb.tls_server.enable";
SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); in handleMessage()
SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1"); in handleMessage()
http://192.168.87.66:8006/source/xref/Pre_figure_turbox-c2130c-la1.1-vendor-dev/LINUX/android/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java#108
Slog.i(TAG, "Wifi disabled. Disabling adbwifi.");
连接wifi adb后,使用下拉状态栏或者setting界面去关闭wifi,并没有上述打印,但问题复现的日志中出现了此异常

1.2 . 不清楚上层在什么时候会去设置这个属性值,从adbd退出原因看,在退出前一直在等待这个属性设备

log: 05-29 22:47:09.496 18123 18125 I adbd : Waiting for persist.adb.tls_server.enable=1
static void start_wifi_enabled_observer() {
std::thread([]() {
bool wifi_enabled = false;
while (true) {
std::string toggled_val = wifi_enabled ? "0" : "1";
LOG(INFO) << "Waiting for " << kWifiEnabledProp << "=" << toggled_val;
if (WaitForProperty(kWifiEnabledProp, toggled_val)) {
wifi_enabled = !wifi_enabled;
LOG(INFO) << kWifiEnabledProp << " changed to " << toggled_val;
if (wifi_enabled) {
enable_wifi_debugging();
} else {
disable_wifi_debugging();
}
}
}
}).detach();
}
#endif //__ANDROID__
} // namespace

2. adbd killed ---->> monkey killed

本地手动stop adbd 会造成monkey killed,这个是正常的,monkey需要adbd输出log
05-29 22:47:09.528     0     0 I [34989.348005] libprocessgroup: Successfully killed process cgroup uid 0 pid 18123 in 32ms
05-29 22:47:09.533 0 0 I [34989.348533] init: Control message: Processed ctl.stop for 'adbd' from pid: 1513 (system_server)
05-29 22:47:09.533 0 0 I [34989.349623] init: Service 'adbd' (pid 18123) received signal 9
05-29 22:47:09.533 0 0 I [34989.350314] init: Untracked pid 18178 received signal 9
05-29 22:47:09.533 0 0 I [34989.350477] init: processing action (init.svc.adbd=stopped) from (/system/etc/init/hw/init.usb.configfs.rc:14)
android/development/cmds/monkey/src/com/android/commands/monkey/MonkeySourceNetwork.java
public MonkeySourceNetwork(int port) throws IOException {
// Only bind this to local host. This means that you can only
// talk to the monkey locally, or though adb port forwarding.
serverSocket = new ServerSocket(port,
0, // default backlog
InetAddress.getLocalHost());
}

#14 Updated by CD SYSTEM-夏旭 about 2 years ago

  • Assignee changed from CD SYSTEM-夏旭 to CD FW 曹覃刚

#15 Updated by CD FW-田成财 about 2 years ago

  • Status changed from ASSIGNED to RESOLVED

■ 结论
Android原生机制,关闭wifi的时候,会发送广播关闭adb_wifi_enabled, 后会通过adb service kill掉adbd进程;
跑monkey的时候可以在开发者选中关闭WirelessDebugging开关,然后再通过adb wifi跑monkey;

■ 分析
1. system_server中的adbdebug线程收到关闭wifi的广播后,会设置SettingsProvider中的值ADB_WIFI_ENABLED;
LINUX/android/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java

599              public void onReceive(Context context, Intent intent) {
600                  String action = intent.getAction();
601                  // We only care about when wifi is disabled, and when there is a wifi network
602                  // change.
603                  if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
604                      int state = intent.getIntExtra(
605                              WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
606                      if (state == WifiManager.WIFI_STATE_DISABLED) {
607                          Slog.i(TAG, "Wifi disabled. Disabling adbwifi.");
608                          Settings.Global.putInt(mContentResolver,
609                                  Settings.Global.ADB_WIFI_ENABLED, 0);

2.adb service会监听Settings.Global.ADB_WIFI_ENABLED变化,如果发生变化会调用setAdbEnabled来kill掉adbd

196      private class AdbSettingsObserver extends ContentObserver {
198          private final Uri mAdbWifiUri = Settings.Global.getUriFor(Settings.Global.ADB_WIFI_ENABLED);

204          @Override
205          public void onChange(boolean selfChange, @NonNull Uri uri, @UserIdInt int userId) {
206              if (mAdbUsbUri.equals(uri)) {
                 ...
212              } else if (mAdbWifiUri.equals(uri)) {
213                  boolean shouldEnable = (Settings.Global.getInt(mContentResolver,
214                          Settings.Global.ADB_WIFI_ENABLED, 0) > 0);
215                  FgThread.getHandler().sendMessage(obtainMessage(
216                          AdbService::setAdbEnabled, AdbService.this, shouldEnable,
217                              AdbTransportType.WIFI));
218              }
219          }
220      }

3.setAdbEnabled最终通过ctl_stop init命令来kill掉adbd进程;

442      private void stopAdbd() {
443          if (!mIsAdbUsbEnabled && !mIsAdbWifiEnabled) {
444              SystemProperties.set(CTL_STOP, ADBD);
445          }
446      }

■ 下一步
通过adb wifi跑monkey之前:
1. 在开发者选中关闭WirelessDebugging开关,再跑;
2. settings加入黑名单;

#16 Updated by CDTS_TEST 王成 almost 2 years ago

  • Status changed from RESOLVED to VERIFIED

客户回复:后续出现该问题再重新提报问题,此票关闭

#17 Updated by CDTS_TEST 王成 almost 2 years ago

  • Status changed from VERIFIED to CLOSED

Also available in: Atom PDF