显示图形系统分析之Java层DisplayDevice和Native层DisplayDevice关联流程 |
您所在的位置:网站首页 › displaydeviceinfo华为 › 显示图形系统分析之Java层DisplayDevice和Native层DisplayDevice关联流程 |
「这是我参与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 |