当前位置: 首页 > news >正文

Android主副屏显示-Android13

Android主副屏显示-Android13

  • 1、DisplayDeviceInfo屏幕信息
  • 2、每个屏幕对应LogicalDisplay
    • 2.1 LogicalDisplay添加对应DisplayContent
    • 2.2 configureDisplayLocked刷新

DisplayManagerService启动及主屏添加-Android13

1、DisplayDeviceInfo屏幕信息

DisplayManagerService启动及主屏添加-Android13 中监听获取,在LocalDisplayAdapter.java#tryConnectDisplayLocked 获取 DisplayDevice 信息,在DisplayDeviceRepository.java#handleDisplayDeviceAdded 获取 DisplayDeviceInfo ( 即 DisplayDevice.getDisplayDeviceInfoLocked()

命令查看屏幕信息:

$ dumpsys SurfaceFlinger --display-id
# Example output.
Display 21691504607621632 (HWC display 0): port=0 pnpId=SHP displayName="LQ123P1JX32"
Display 9834494747159041 (HWC display 2): port=1 pnpId=HWP displayName="HP Z24i"
Display 1886279400700944 (HWC display 1): port=2 pnpId=AUS displayName="ASUS MB16AP"
  • mInfo.width = mActiveSfDisplayMode.width:屏幕宽
  • mInfo.height = mActiveSfDisplayMode.height:屏幕高
  • mInfo.densityDpi = getLogicalDensity():屏幕Density
  • mInfo.xDpi = mActiveSfDisplayMode.xDpi:显示器在X方向上的DPI物理密度
  • mInfo.yDpi = mActiveSfDisplayMode.yDpi:显示器在Y方向上的DPI物理密度。
  • mInfo.installOrientation = mStaticDisplayInfo.installOrientation:显示面板的安装方向相对于其自然方向。
  • mInfo.type = Display.TYPE_INTERNAL 或 Display.TYPE_EXTERNAL :内置屏幕<string name="display_manager_built_in_display_name">Built-in Screen</string>、HDMI 屏幕<string name="display_manager_hdmi_display_name">HDMI Screen</string>
  • public int rotation = Surface.ROTATION_0:显示旋转方向

添加 “内置屏幕” 1080 x 2400 density 420, 420.0 x 420.0 dpi rotation 0 type INTERNAL installOrientation 0

09-14 16:10:38.304   607   650 I DisplayDeviceRepository: Display device added: DisplayDeviceInfo{"内置屏幕": uniqueId="local:4619827259835644672", 1080 x 2400, modeId 1, renderFrameRate 60.000004, defaultModeId 1, supportedModes [{id=1, width=1080, height=2400, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, allmSupported false, gameContentTypeSupported false, density 420, 420.0 x 420.0 dpi, appVsyncOff 1000000, presDeadline 16666666, touch INTERNAL, rotation 0, type INTERNAL, address {port=0, model=0x401cec6a7a2b7b}, deviceProductInfo DeviceProductInfo{name=EMU_display_0, manufacturerPnpId=GGL, productId=1, modelYear=null, manufactureDate=ManufactureDate{week=27, year=2006}, connectionToSinkType=0}, state UNKNOWN, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.39763778, hdrSdrRatio NaN, FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=-1893857183 displayWidth=1080 displayHeight=2400 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:10:38.307   607   650 I LogicalDisplayMapper: Applying layout: [{dispId: 0(ON), displayGroupName: , addr: {port=0, model=0x401cec6a7a2b7b}, mThermalBrightnessThrottlingMapId: null, mRefreshRateZoneId: null, mLeadDisplayId: -1, mThermalRefreshRateThrottlingMapId: null}], Previous layout: null
09-14 16:10:38.317   607   650 I LogicalDisplayMapper: Setting new display group 0 for display 0, from previous group: null
09-14 16:10:38.320   607   650 I LogicalDisplayMapper: Adding new display: 0: DisplayInfo{"内置屏幕", displayId 0, displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1080 x 2400, largest app 1080 x 2400, smallest app 1080 x 2400, appVsyncOff 1000000, presDeadline 16666666, mode 160.000004, defaultMode 1, modes [{id=1, width=1080, height=2400, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state UNKNOWN, committedState UNKNOWN, type INTERNAL, uniqueId "local:4619827259835644672", app 1080 x 2400, density 420 (420.0 x 420.0) dpi, layerStack 0, colorMode 0, supportedColorModes [0], address {port=0, model=0x401cec6a7a2b7b}, deviceProductInfo DeviceProductInfo{name=EMU_display_0, manufacturerPnpId=GGL, productId=1, modelYear=null, manufactureDate=ManufactureDate{week=27, year=2006}, connectionToSinkType=0}, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.39763778, installOrientation ROTATION_0, layoutLimitedRefreshRate null, hdrSdrRatio not_available, thermalRefreshRateThrottling {}, thermalBrightnessThrottlingDataId default}
09-14 16:10:49.174   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", ON
09-14 16:10:49.185   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", ON
09-14 16:10:50.814   607   650 I DisplayDeviceRepository: Display device added: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:10:50.820   607   650 I LogicalDisplayMapper: Applying layout: [{dispId: 0(ON), displayGroupName: , addr: {port=0, model=0x401cec6a7a2b7b}, mThermalBrightnessThrottlingMapId: null, mRefreshRateZoneId: null, mLeadDisplayId: -1, mThermalRefreshRateThrottlingMapId: null}], Previous layout: [{dispId: 0(ON), displayGroupName: , addr: {port=0, model=0x401cec6a7a2b7b}, mThermalBrightnessThrottlingMapId: null, mRefreshRateZoneId: null, mLeadDisplayId: -1, mThermalRefreshRateThrottlingMapId: null}]
09-14 16:10:50.821   607   650 I LogicalDisplayMapper: Setting new display group 0 for display 2, from previous group: null
09-14 16:10:50.825   607   650 I LogicalDisplayMapper: Adding new display: 2: DisplayInfo{"叠加视图 #1", displayId 2, displayGroupId 0, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, real 1920 x 1080, largest app 1920 x 1080, smallest app 1920 x 1080, appVsyncOff 0, presDeadline 33333332, mode 260.000004, defaultMode 2, modes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], hdrCapabilities null, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, committedState UNKNOWN, type OVERLAY, uniqueId "overlay:1", app 1920 x 1080, density 320 (320.0 x 320.0) dpi, layerStack 2, colorMode 0, supportedColorModes [0], deviceProductInfo null, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, installOrientation ROTATION_0, layoutLimitedRefreshRate null, hdrSdrRatio not_available, thermalRefreshRateThrottling {}, thermalBrightnessThrottlingDataId default}
09-14 16:10:58.994   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"内置屏幕": uniqueId="local:4619827259835644672", 1080 x 2400, modeId 1, renderFrameRate 60.000004, defaultModeId 1, supportedModes [{id=1, width=1080, height=2400, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, allmSupported false, gameContentTypeSupported false, density 420, 420.0 x 420.0 dpi, appVsyncOff 1000000, presDeadline 16666666, cutout DisplayCutout{insets=Rect(0, 132 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(479, 0 - 601, 132), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.625} cutoutSpec={m 576,65.75 a 36.25,36.25 0 0 0 -72.5,0 36.25,36.25 0 0 0 72.5,0 z @left} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, touch INTERNAL, rotation 0, type INTERNAL, address {port=0, model=0x401cec6a7a2b7b}, deviceProductInfo DeviceProductInfo{name=EMU_display_0, manufacturerPnpId=GGL, productId=1, modelYear=null, manufactureDate=ManufactureDate{week=27, year=2006}, connectionToSinkType=0}, state ON, committedState ON, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.39763778, hdrSdrRatio NaN, roundedCorners RoundedCorners{[RoundedCorner{position=TopLeft, radius=104, center=Point(104, 104)}, RoundedCorner{position=TopRight, radius=104, center=Point(976, 104)}, RoundedCorner{position=BottomRight, radius=102, center=Point(978, 2298)}, RoundedCorner{position=BottomLeft, radius=102, center=Point(102, 2298)}]}, FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, installOrientation 0, displayShape DisplayS ...
09-14 16:10:59.203   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:10:59.210   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:10:44.078   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:10:44.343   607   650 I LogicalDisplayMapper: Requesting Transition to state: 0, from state=-1, interactive=true, mBootCompleted=true
09-14 16:10:44.343   607   650 I LogicalDisplayMapper: Applying layout: [{dispId: 0(ON), displayGroupName: , addr: {port=0, model=0x401cec6a7a2b7b}, mThermalBrightnessThrottlingMapId: null, mRefreshRateZoneId: null, mLeadDisplayId: -1, mThermalRefreshRateThrottlingMapId: null}], Previous layout: [{dispId: 0(ON), displayGroupName: , addr: {port=0, model=0x401cec6a7a2b7b}, mThermalBrightnessThrottlingMapId: null, mRefreshRateZoneId: null, mLeadDisplayId: -1, mThermalRefreshRateThrottlingMapId: null}]
09-14 16:10:48.835   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"内置屏幕": uniqueId="local:4619827259835644672", 1080 x 2400, modeId 1, renderFrameRate 60.000004, defaultModeId 1, supportedModes [{id=1, width=1080, height=2400, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, allmSupported false, gameContentTypeSupported false, density 420, 420.0 x 420.0 dpi, appVsyncOff 1000000, presDeadline 16666666, cutout DisplayCutout{insets=Rect(0, 132 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(479, 0 - 601, 132), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.625} cutoutSpec={m 576,65.75 a 36.25,36.25 0 0 0 -72.5,0 36.25,36.25 0 0 0 72.5,0 z @left} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, touch INTERNAL, rotation 0, type INTERNAL, address {port=0, model=0x401cec6a7a2b7b}, deviceProductInfo DeviceProductInfo{name=EMU_display_0, manufacturerPnpId=GGL, productId=1, modelYear=null, manufactureDate=ManufactureDate{week=27, year=2006}, connectionToSinkType=0}, state ON, committedState ON, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.39763778, hdrSdrRatio NaN, roundedCorners RoundedCorners{[RoundedCorner{position=TopLeft, radius=104, center=Point(104, 104)}, RoundedCorner{position=TopRight, radius=104, center=Point(976, 104)}, RoundedCorner{position=BottomRight, radius=102, center=Point(978, 2298)}, RoundedCorner{position=BottomLeft, radius=102, center=Point(102, 2298)}]}, FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, installOrientation 0, displayShape DisplayS ...
09-14 16:11:13.939   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:11:24.379   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", OFF
09-14 16:11:24.390   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", OFF
09-14 16:11:24.425   607   650 I DisplayDeviceRepository: Display device changed state: "叠加视图 #1", OFF
09-14 16:11:24.478   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state OFF, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:11:27.676   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", ON
09-14 16:11:27.688   607   650 I DisplayDeviceRepository: Display device changed state: "内置屏幕", ON
09-14 16:11:27.777   607   650 I DisplayDeviceRepository: Display device changed state: "叠加视图 #1", ON
09-14 16:11:27.829   607   650 I DisplayDeviceRepository: Display device changed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:14:42.174   607   650 I DisplayDeviceRepository: Display device removed: DisplayDeviceInfo{"叠加视图 #1": uniqueId="overlay:1", 1920 x 1080, modeId 2, renderFrameRate 60.000004, defaultModeId 2, supportedModes [{id=2, width=1920, height=1080, fps=60.000004, alternativeRefreshRates=[], supportedHdrTypes=[]}], colorMode 0, supportedColorModes [0], hdrCapabilities null, allmSupported false, gameContentTypeSupported false, density 320, 320.0 x 320.0 dpi, appVsyncOff 0, presDeadline 33333332, touch VIRTUAL, rotation 0, type OVERLAY, deviceProductInfo null, state ON, committedState UNKNOWN, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, hdrSdrRatio NaN, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, installOrientation 0, displayShape DisplayShape{ spec=729782573 displayWidth=1920 displayHeight=1080 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}}
09-14 16:14:42.191   607   650 I LogicalDisplayMapper: Removing display: 2

frameworks/base/services/core/java/com/android/server/display/DisplayDeviceRepository.java

public DisplayDeviceInfo getDisplayDeviceInfoLocked() {if (mInfo == null) {mInfo = new DisplayDeviceInfo();mInfo.width = mActiveSfDisplayMode.width;mInfo.height = mActiveSfDisplayMode.height;mInfo.modeId = mActiveModeId;mInfo.defaultModeId = getPreferredModeId();mInfo.supportedModes = getDisplayModes(mSupportedModes);mInfo.colorMode = mActiveColorMode;mInfo.allmSupported = mAllmSupported;mInfo.gameContentTypeSupported = mGameContentTypeSupported;mInfo.supportedColorModes =new int[mSupportedColorModes.size()];for (int i = 0; i < mSupportedColorModes.size(); i++) {mInfo.supportedColorModes[i] = mSupportedColorModes.get(i);}mInfo.hdrCapabilities = mHdrCapabilities;mInfo.appVsyncOffsetNanos = mActiveSfDisplayMode.appVsyncOffsetNanos;mInfo.presentationDeadlineNanos = mActiveSfDisplayMode.presentationDeadlineNanos;mInfo.state = mState;mInfo.uniqueId = getUniqueId();final DisplayAddress.Physical physicalAddress =DisplayAddress.fromPhysicalDisplayId(mPhysicalDisplayId);mInfo.address = physicalAddress;mInfo.densityDpi = getLogicalDensity();mInfo.xDpi = mActiveSfDisplayMode.xDpi;mInfo.yDpi = mActiveSfDisplayMode.yDpi;mInfo.deviceProductInfo = mStaticDisplayInfo.deviceProductInfo;// Assume that all built-in displays that have secure output (eg. HDCP) also// support compositing from gralloc protected buffers.if (mStaticDisplayInfo.secure) {mInfo.flags = DisplayDeviceInfo.FLAG_SECURE| DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS;}final Resources res = getOverlayContext().getResources();mInfo.flags |= DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY;if (mIsFirstDisplay) {if (res.getBoolean(com.android.internal.R.bool.config_mainBuiltInDisplayIsRound)|| (Build.IS_EMULATOR&& SystemProperties.getBoolean(PROPERTY_EMULATOR_CIRCULAR, false))) {mInfo.flags |= DisplayDeviceInfo.FLAG_ROUND;}} else {if (!res.getBoolean(com.android.internal.R.bool.config_localDisplaysMirrorContent)) {mInfo.flags |= DisplayDeviceInfo.FLAG_OWN_CONTENT_ONLY;}if (isDisplayPrivate(physicalAddress)) {mInfo.flags |= DisplayDeviceInfo.FLAG_PRIVATE;}}if (DisplayCutout.getMaskBuiltInDisplayCutout(res, mInfo.uniqueId)) {mInfo.flags |= DisplayDeviceInfo.FLAG_MASK_DISPLAY_CUTOUT;}final Display.Mode maxDisplayMode =DisplayUtils.getMaximumResolutionDisplayMode(mInfo.supportedModes);final int maxWidth =maxDisplayMode == null ? mInfo.width : maxDisplayMode.getPhysicalWidth();final int maxHeight =maxDisplayMode == null ? mInfo.height : maxDisplayMode.getPhysicalHeight();mInfo.displayCutout = DisplayCutout.fromResourcesRectApproximation(res,mInfo.uniqueId, maxWidth, maxHeight, mInfo.width, mInfo.height);mInfo.roundedCorners = RoundedCorners.fromResources(res, mInfo.uniqueId, maxWidth, maxHeight, mInfo.width, mInfo.height);mInfo.installOrientation = mStaticDisplayInfo.installOrientation;if (mStaticDisplayInfo.isInternal) {mInfo.type = Display.TYPE_INTERNAL;mInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;mInfo.name = res.getString(com.android.internal.R.string.display_manager_built_in_display_name);} else {mInfo.type = Display.TYPE_EXTERNAL;mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;mInfo.flags |= DisplayDeviceInfo.FLAG_PRESENTATION;mInfo.name = getContext().getResources().getString(com.android.internal.R.string.display_manager_hdmi_display_name);}mInfo.frameRateOverrides = mFrameRateOverrides;// The display is trusted since it is created by system.mInfo.flags |= DisplayDeviceInfo.FLAG_TRUSTED;mInfo.brightnessMinimum = PowerManager.BRIGHTNESS_MIN;mInfo.brightnessMaximum = PowerManager.BRIGHTNESS_MAX;mInfo.brightnessDefault = getDisplayDeviceConfig().getBrightnessDefault();}return mInfo;
}

在这里插入图片描述
frameworks/base/services/core/java/com/android/server/display/DisplayDeviceInfo.java

public String toString() {StringBuilder sb = new StringBuilder();sb.append("DisplayDeviceInfo{\"");sb.append(name).append("\": uniqueId=\"").append(uniqueId).append("\", ");sb.append(width).append(" x ").append(height);sb.append(", modeId ").append(modeId);sb.append(", defaultModeId ").append(defaultModeId);sb.append(", supportedModes ").append(Arrays.toString(supportedModes));sb.append(", colorMode ").append(colorMode);sb.append(", supportedColorModes ").append(Arrays.toString(supportedColorModes));sb.append(", hdrCapabilities ").append(hdrCapabilities);sb.append(", allmSupported ").append(allmSupported);sb.append(", gameContentTypeSupported ").append(gameContentTypeSupported);sb.append(", density ").append(densityDpi);sb.append(", ").append(xDpi).append(" x ").append(yDpi).append(" dpi");sb.append(", appVsyncOff ").append(appVsyncOffsetNanos);sb.append(", presDeadline ").append(presentationDeadlineNanos);if (displayCutout != null) {sb.append(", cutout ").append(displayCutout);}sb.append(", touch ").append(touchToString(touch));sb.append(", rotation ").append(rotation);sb.append(", type ").append(Display.typeToString(type));if (address != null) {sb.append(", address ").append(address);}sb.append(", deviceProductInfo ").append(deviceProductInfo);sb.append(", state ").append(Display.stateToString(state));if (ownerUid != 0 || ownerPackageName != null) {sb.append(", owner ").append(ownerPackageName);sb.append(" (uid ").append(ownerUid).append(")");}sb.append(", frameRateOverride ");for (DisplayEventReceiver.FrameRateOverride frameRateOverride : frameRateOverrides) {sb.append(frameRateOverride).append(" ");}sb.append(", brightnessMinimum ").append(brightnessMinimum);sb.append(", brightnessMaximum ").append(brightnessMaximum);sb.append(", brightnessDefault ").append(brightnessDefault);if (roundedCorners != null) {sb.append(", roundedCorners ").append(roundedCorners);}sb.append(flagsToString(flags));sb.append(", installOrientation ").append(installOrientation);sb.append("}");return sb.toString();
}

2、每个屏幕对应LogicalDisplay

frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java

RootWindowContainer.java#onDisplayAdded

DisplayContent.java#updateDisplayAndOrientation

DisplayManagerService.java#setDisplayInfoOverrideFromWindowManager

LogicalDisplay.java#setDisplayInfoOverrideFromWindowManagerLocked

2.1 LogicalDisplay添加对应DisplayContent

在这里插入图片描述

2.2 configureDisplayLocked刷新

RootWindowContainer.java#applySurfaceChangesTransaction

DisplayManagerService.java#performTraversalLocked

DisplayManagerService.java#configureDisplayLocked

LogicalDisplay.java#configureDisplayLocked

主屏:1080x2160

mDisplayId=0; orientation=0; physWidth=1080; physHeight=2160; rotated=false [ displayDeviceInfo.rotation=0; displayDeviceInfo.width=1080; displayDeviceInfo.height=2160; displayInfo.rotation=0; displayInfo.logicalWidth=1080; displayInfo.logicalHeight=2160 ]
mDisplayId=0; mTempDisplayRect=Rect(0, 0 - 1080, 2160); mTempLayerStackRect=Rect(0, 0 - 1080, 2160); orientation=0mDisplayId=0; orientation=1; physWidth=2160; physHeight=1080; rotated=true [ displayDeviceInfo.rotation=0; displayDeviceInfo.width=1080; displayDeviceInfo.height=2160; displayInfo.rotation=1; displayInfo.logicalWidth=2160; displayInfo.logicalHeight=1080 ]
mDisplayId=0; mTempDisplayRect=Rect(0, 0 - 2160, 1080); mTempLayerStackRect=Rect(0, 0 - 2160, 1080); orientation=1

副屏:1920x1080 (修改处理?

mDisplayId=2; orientation=0; physWidth=1920; physHeight=1080 [ displayDeviceInfo.rotation=0; displayDeviceInfo.width=1920; displayDeviceInfo.height=1080; displayInfo.rotation=0; displayInfo.logicalWidth=1920; displayInfo.logicalHeight=1080 ] 
mDisplayId=2; mTempDisplayRect=Rect(0, 0 - 1920, 1080); mTempLayerStackRect=Rect(0, 0 - 1920, 1080); orientation=0mDisplayId=2; orientation=3; physWidth=1080; physHeight=1920; rotated=true [ displayDeviceInfo.rotation=3; displayDeviceInfo.width=1920; displayDeviceInfo.height=1080; displayInfo.rotation=0; displayInfo.logicalWidth=1920; displayInfo.logicalHeight=1080 ]
mDisplayId=2; mTempDisplayRect=Rect(0, 0 - 1080, 1920); mTempLayerStackRect=Rect(0, 0 - 1080, 1920); orientation=3
http://www.lryc.cn/news/438039.html

相关文章:

  • 什么是 SMB 服务器以及它如何工作?
  • 【python计算机视觉编程——10.OpenCV】
  • 医学数据分析实训 项目二 数据预处理预备知识(数据标准化处理,数据离差标准化处理,数据二值化处理,独热编码处理,数据PCA降维处理)
  • MySQL查询执行(四):查一行也很慢
  • 【Obsidian】当笔记接入AI,Copilot插件推荐
  • Spring Cloud集成Gateaway
  • 如何准备技术面试?
  • Kafka原理剖析之「Topic创建」
  • Java 高级学习路线概要~
  • 浏览器插件快速开启/关闭IDM接管下载
  • 初识c++:入门基础
  • Java Exception 异常相关总结
  • HighCharts图表自动化简介
  • 使用LDAP登录GitLab
  • 【2024】前端学习笔记5-表单标签使用
  • 数据结构--二叉树(C语言实现,超详细!!!)
  • 【将字符串变为空的编辑距离】
  • 卡特兰数的推理
  • 高精度治具加工的重要性和优势
  • 新版IDEA提示@Autowired不建议字段注入
  • adb的安装和使用 以及安装Frida 16.0.10+雷电模拟器
  • 解决移动端1px 边框优化的8个方法
  • 频带宽度固定,如何突破数据速率的瓶颈?
  • Linux网络编程 --- 高级IO
  • Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?
  • 系统优化工具 | PC Cleaner v9.7.0.3 绿色版
  • JavaSE、JavaEE 与 JavaWeb 的详解与区别
  • HCIE和CCIE,哪个含金量更高点?
  • 2024.9.14 Python与图像处理新国大EE5731课程大作业,马尔可夫随机场和二值图割,校正立体图像的深度
  • 工业大模型市场图谱:53个工业大模型全面梳理