Add developer option switch to set ANGLE as the default system driver

This change adds a new developer option switch called
"Enable ANGLE". It defaults to off. User can choose
to toggle it on and off, and the value of the system
property "persist.graphics.egl" is changed accordingly:

switch off: persist.graphics.egl=""
switch on: persist.graphics.egl="angle"

When user toggles the switch, a reboot window is
popped up asking user to reboot now to make the change
takes effect. If user chooses to cancel the reboot,
the switch is toggled back. This enforces that a reboot
is required whenever the "persis.graphics.egl" value
changes.

Upon reboot, we will load either ANGLE or native
GLES driver as the system driver, based on the value of
"persist.graphics.egl".

The switch is disabled if ANGLE is not installed
in /vendor partition. We use the system property
"ro.gfx.angle.supported" as an indicator. We set the
two conditions together in angle.mk file. Any device
mk file that inherits angle.mk file will result in
ANGLE libs installed in /vendor and "ro.gfx.angle.supported"
set to true.

Bug: b/270994705
Test: m; flash and check Pixel 7 boots fine
atest SettingsRoboTests:GraphicsDriverEnableAngleAsSystemDriverControllerTest

Change-Id: I565eff614472bb6ba50742e7dfa49b50dca2809f
This commit is contained in:
Yuxin Hu
2023-04-19 02:40:13 +00:00
parent 0927e2af1d
commit 25b270c0f8
9 changed files with 351 additions and 20 deletions

View File

@@ -37,22 +37,33 @@ public class RebootConfirmationDialogFragment extends InstrumentedDialogFragment
private static final String TAG = "FreeformPrefRebootDlg";
private final int mMessageId;
private final int mCancelButtonId;
private final RebootConfirmationDialogHost mHost;
/**
* Show an instance of this dialog.
*/
public static void show(Fragment fragment, int messageId, RebootConfirmationDialogHost host) {
show(fragment, messageId, R.string.reboot_dialog_reboot_later, host);
}
/**
* Show an instance of this dialog with cancel button string set as cancelButtonId
*/
public static void show(Fragment fragment, int messageId,
int cancelButtonId, RebootConfirmationDialogHost host) {
final FragmentManager manager = fragment.getActivity().getSupportFragmentManager();
if (manager.findFragmentByTag(TAG) == null) {
final RebootConfirmationDialogFragment dialog =
new RebootConfirmationDialogFragment(messageId, host);
new RebootConfirmationDialogFragment(messageId, cancelButtonId, host);
dialog.show(manager, TAG);
}
}
private RebootConfirmationDialogFragment(int messageId, RebootConfirmationDialogHost host) {
private RebootConfirmationDialogFragment(int messageId,
int cancelButtonId, RebootConfirmationDialogHost host) {
mMessageId = messageId;
mCancelButtonId = cancelButtonId;
mHost = host;
}
@@ -66,12 +77,16 @@ public class RebootConfirmationDialogFragment extends InstrumentedDialogFragment
return new AlertDialog.Builder(getActivity())
.setMessage(mMessageId)
.setPositiveButton(R.string.reboot_dialog_reboot_now, this)
.setNegativeButton(R.string.reboot_dialog_reboot_later, null)
.setNegativeButton(mCancelButtonId, this)
.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
mHost.onRebootConfirmed();
if (which == DialogInterface.BUTTON_POSITIVE) {
mHost.onRebootConfirmed(getContext());
} else {
mHost.onRebootCancelled();
}
}
}