显示图形系统分析之Java层DisplayDevice和Native层DisplayDevice关联流程

您所在的位置:网站首页 displaydeviceinfo华为 显示图形系统分析之Java层DisplayDevice和Native层DisplayDevice关联流程

显示图形系统分析之Java层DisplayDevice和Native层DisplayDevice关联流程

2023-09-29 08:26| 来源: 网络整理| 查看: 265

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。

Java层DisplayDevice和Native层DisplayDevice关联流程

在上一篇默认DisplayDevice显示设备加载流程分析中,我们分析了Native层的DisplayDevice显示设备在SurfaceFlinger中的加载,那么在frameworks的Java层,是如何跟这个DisplayDevice进行关联的呢?

我们知道,安卓系统启动中,通过init进程启动zygote进程后,zygote进程会初始化JAVA世界,Java世界的入口是SystemServer对象,在SystemServer对象中会初始化很多系统服务,其中DisplayManagerService服务就是在此时初始化的

mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);

系统启动流程分析中,我们分析过SystemServiceManager.startService函数,可知,在这个函数中主要是做了

调用DisplayManagerService的单参(Context)构造函数来初始化DisplayManagerService对象 将上述初始化的DisplayManagerService对象注册到SystemServiceManager.mServices中 调用DisplayManagerService的onStart函数

如下,我们重点分析第一/三条步骤

DisplayManagerService对象初始化 public DisplayManagerService(Context context) { this(context, new Injector()); } DisplayManagerService(Context context, Injector injector) { super(context); mInjector = injector; mContext = context; // 初始化DisplayManagerHandler对象 // DisplayManagerHandler类继承自Handler类,注意其传入参数为DisplayThread线程的Looper mHandler = new DisplayManagerHandler(DisplayThread.get().getLooper()); // 获取Handler对象,这边的Handler对象的Looper为UiThread的Looper mUiHandler = UiThread.getHandler(); // 初始化DisplayAdapterListener监听显示设备的变化 mDisplayAdapterListener = new DisplayAdapterListener(); // 初始化DisplayModeDirector对象 mDisplayModeDirector = new DisplayModeDirector(context, mHandler); mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false); Resources resources = mContext.getResources(); // 默认值为0 mDefaultDisplayDefaultColorMode = mContext.getResources().getInteger( com.android.internal.R.integer.config_defaultDisplayDefaultColorMode); mDefaultDisplayTopInset = SystemProperties.getInt(PROP_DEFAULT_DISPLAY_TOP_INSET, -1); float[] lux = getFloatArray(resources.obtainTypedArray( com.android.internal.R.array.config_minimumBrightnessCurveLux)); float[] nits = getFloatArray(resources.obtainTypedArray( com.android.internal.R.array.config_minimumBrightnessCurveNits)); mMinimumBrightnessCurve = new Curve(lux, nits); mMinimumBrightnessSpline = Spline.createSpline(lux, nits); // 获取默认背光亮度 PowerManager pm = mContext.getSystemService(PowerManager.class); mGlobalDisplayBrightness = pm.getBrightnessConstraint( PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DEFAULT); mCurrentUserId = UserHandle.USER_SYSTEM; // 从Native层获取data color spaces ColorSpace[] colorSpaces = SurfaceControl.getCompositionColorSpaces(); mWideColorSpace = colorSpaces[1]; mSystemReady = false; }

可以看到,在这个函数中主要初始化一些参数,其中的类图关系如下

classDiagram SystemService


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3