Android Display ID 对应关系

目录

四个基本ID

模块、类和id之间对应关系图


Android 中 对display 操作时, 从APP, DisplayManagerService, SurfaceFlinger到HWC通信都需要用到display id, 但是, 实际上,每个模块的display id 并不一致, 他们之间有一定的对应关系。 本文梳理各模块间display id对应关系。

四个基本ID

  • DisplayID: DisplayManagerService用于管理display 使用的id, 也是app 能够通过Display.getDisplayId() 得到的ID. 该ID 是按display 加载的顺序确定的, 每加载一个display, id依次增一。 代码:rameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java中assignDisplayIdLocked.  
  • PhysicalDisplayID: SurfaceFlinger 中管理display 使用的ID, DisplayManagerService与SurfaceFlinger通信借助该ID. surfaceflinger中根据 mPhysicalDisplayId 找到HWC::Display, 通过HWC::Display中的mid 与hwc 通信, 其中的mId 为HWC给出, 即为下面的client_id. 
  • client_id: HWC中定义的ID, 会传递给SurfaceFlinger,  与SurfaceFlinger 通信使用该ID. HWC按照可支持的display 数量和类型的定义:hardware/qcom/display/sdm/libs/hwc2/hwc_session.cpp中HWCSession::InitSupportedDisplaySlots看map_info.client_id赋值。 client_id 与 surfaceflinger 中HWC::Display中的mId 相同。 hwc_session中根据该client_id通过hwc_display_[client_id]找到相应的 HWCDisplay, 该HWCDisplay中记录了sdm_id, 对应底层的display id. 
  • sdm_id: display driver传递给HWC的ID.如下log显示display的smd_id:
06-01 06:00:55.319   413  1236 I SDM     : HWCSession::HandlePluggableDisplays:  Handling hotplug... display_info.sdm_id =  3001, info.display_type= 0
06-01 06:00:55.319   413  1236 I SDM     : HWCSession::HandlePluggableDisplays: Handling hotplug... display_info.sdm_id =  3002, info.display_type= 1
06-01 06:00:55.319   413  1236 I SDM     : HWCSession::HandlePluggableDisplays: Handling hotplug... display_info.sdm_id =  3003, info.display_type= 1
06-01 06:00:55.320   413  1236 I SDM     : HWCSession::HandlePluggableDisplays:  Handling hotplug... display_info.sdm_id =  3004, info.display_type= 1

模块、类和id之间对应关系图

Android Display ID 对应关系_第1张图片

你可能感兴趣的:(android,android,display)