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 安装及部署项目
下一篇:
相关文章
-
无相关信息