软件编程
位置:首页>> 软件编程>> Android编程>> Android 显示刷新频率的实现代码

Android 显示刷新频率的实现代码

作者:xhBruce  发布时间:2023-09-18 07:01:34 

标签:android,刷新,频率

Android 显示刷新频率

android11-release

Android 显示刷新频率的实现代码 Android 显示刷新频率的实现代码

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

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

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


public class ShowRefreshRatePreferenceController extends DeveloperOptionsPreferenceController
       implements 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;

@VisibleForTesting
   static final String SURFACE_FLINGER_SERVICE_KEY = "SurfaceFlinger";
   @VisibleForTesting
   static 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);
   }

@Override
   public String getPreferenceKey() {
       return SHOW_REFRESH_RATE_KEY;
   }

@Override
   public boolean onPreferenceChange(Preference preference, Object newValue) {
       final boolean isEnabled = (Boolean) newValue;
       writeShowRefreshRateSetting(isEnabled);
       return true;
   }

@Override
   public void updateState(Preference preference) {
       updateShowRefreshRateSetting();
   }

@Override
   protected 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 avoid
           writeShowRefreshRateSetting(false);
           preference.setChecked(false);
       }
   }

@VisibleForTesting
   void 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
       }
   }

@VisibleForTesting
   void 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显示刷新频率


frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp
frameworks\native\services\surfaceflinger\RefreshRateOverlay.cpp

Android 显示刷新频率的实现代码 Android 显示刷新频率的实现代码

初始化 RefreshRateOverlay,通过 SurfaceFlinger createLayer显示

Android 显示刷新频率的实现代码

来源:https://blog.csdn.net/qq_23452385/article/details/119335668

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com