素材巴巴 > 程序开发 >

Android 显示刷新频率

程序开发 2023-09-11 08:16:33

Android 显示刷新频率

android11-release
在这里插入图片描述 在这里插入图片描述

开发者选项->显示刷新频率

packages/apps/Settings/src/com/android/settings/development/ShowRefreshRatePreferenceController.java

调用 SurfaceFlinger::onTransact 中 1034 方法
updateShowRefreshRateSetting() 通过 SurfaceFlinger 获取 mRefreshRateOverlay != nullptr 判断显示是否打开
writeShowRefreshRateSetting(boolean isEnabled) 设置打开显示刷新频率

public class ShowRefreshRatePreferenceController extends DeveloperOptionsPreferenceControllerimplements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {private static final String SHOW_REFRESH_RATE_KEY = "show_refresh_rate";private static final int SETTING_VALUE_QUERY = 2;private static final int SETTING_VALUE_ON = 1;private static final int SETTING_VALUE_OFF = 0;@VisibleForTestingstatic final String SURFACE_FLINGER_SERVICE_KEY = "SurfaceFlinger";@VisibleForTestingstatic final int SURFACE_FLINGER_CODE = 1034;private static final String SURFACE_COMPOSER_INTERFACE_KEY = "android.ui.ISurfaceComposer";private final IBinder mSurfaceFlinger;public ShowRefreshRatePreferenceController(Context context) {super(context);mSurfaceFlinger = ServiceManager.getService(SURFACE_FLINGER_SERVICE_KEY);}@Overridepublic String getPreferenceKey() {return SHOW_REFRESH_RATE_KEY;}@Overridepublic boolean onPreferenceChange(Preference preference, Object newValue) {final boolean isEnabled = (Boolean) newValue;writeShowRefreshRateSetting(isEnabled);return true;}@Overridepublic void updateState(Preference preference) {updateShowRefreshRateSetting();}@Overrideprotected void onDeveloperOptionsSwitchDisabled() {super.onDeveloperOptionsSwitchDisabled();final SwitchPreference preference = (SwitchPreference) mPreference;if (preference.isChecked()) {// Writing false to the preference when the setting is already off will have a// side effect of turning on the preference that we wish to avoidwriteShowRefreshRateSetting(false);preference.setChecked(false);}}@VisibleForTestingvoid updateShowRefreshRateSetting() {// magic communication with surface flinger.try {if (mSurfaceFlinger != null) {final Parcel data = Parcel.obtain();final Parcel reply = Parcel.obtain();data.writeInterfaceToken(SURFACE_COMPOSER_INTERFACE_KEY);data.writeInt(SETTING_VALUE_QUERY);mSurfaceFlinger.transact(SURFACE_FLINGER_CODE, data, reply, 0 /* flags */);final boolean enabled = reply.readBoolean();((SwitchPreference) mPreference).setChecked(enabled);reply.recycle();data.recycle();}} catch (RemoteException ex) {// intentional no-op}}@VisibleForTestingvoid writeShowRefreshRateSetting(boolean isEnabled) {try {if (mSurfaceFlinger != null) {final Parcel data = Parcel.obtain();data.writeInterfaceToken(SURFACE_COMPOSER_INTERFACE_KEY);final int showRefreshRate = isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF;data.writeInt(showRefreshRate);mSurfaceFlinger.transact(SURFACE_FLINGER_CODE, data,null /* reply */, 0 /* flags */);data.recycle();}} catch (RemoteException ex) {// intentional no-op}updateShowRefreshRateSetting();}
 }
 

RefreshRateOverlay 实际Layer显示刷新频率

frameworksnativeservicessurfaceflingerSurfaceFlinger.cpp
 frameworksnativeservicessurfaceflingerRefreshRateOverlay.cpp
 

在这里插入图片描述 在这里插入图片描述
初始化 RefreshRateOverlay,通过 SurfaceFlinger createLayer显示
在这里插入图片描述


标签:

上一篇: Nginx 安装及部署项目 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。