Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04502468 authored by Tim Van Patten's avatar Tim Van Patten
Browse files

IGpuService: Add getFeatureOverrides()

Add getFeatureOverrides() to the IGpuService interface. This function
returns the list of feature overrides parsed by GpuService to the
caller. This list of feature overrides will be stored by GraphicsEnv, so
it can later be used to override features when creating the ANGLE EGL
display.

Bug: 372694741
Test: CQ
Flag: com.android.graphics.graphicsenv.flags.feature_overrides
Change-Id: Idb727e23306c3deb2b8f98e6db3d9906bb63598f
parent 4a5fd7e2
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -119,6 +119,21 @@ public:
        }
        return driverPath;
    }

    FeatureOverrides getFeatureOverrides() override {
        Parcel data, reply;
        data.writeInterfaceToken(IGpuService::getInterfaceDescriptor());

        FeatureOverrides featureOverrides;
        status_t error =
                remote()->transact(BnGpuService::GET_FEATURE_CONFIG_OVERRIDES, data, &reply);
        if (error != OK) {
            return featureOverrides;
        }

        featureOverrides.readFromParcel(&reply);
        return featureOverrides;
    }
};

IMPLEMENT_META_INTERFACE(GpuService, "android.graphicsenv.IGpuService");
@@ -271,6 +286,15 @@ status_t BnGpuService::onTransact(uint32_t code, const Parcel& data, Parcel* rep
            toggleAngleAsSystemDriver(enableAngleAsSystemDriver);
            return OK;
        }
        case GET_FEATURE_CONFIG_OVERRIDES: {
            CHECK_INTERFACE(IGpuService, data, reply);

            // Get the FeatureOverrides from gpuservice, which implements the IGpuService interface
            // with GpuService::getFeatureOverrides().
            FeatureOverrides featureOverrides = getFeatureOverrides();
            featureOverrides.writeToParcel(reply);
            return OK;
        }
        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <binder/IInterface.h>
#include <cutils/compiler.h>
#include <graphicsenv/FeatureOverrides.h>
#include <graphicsenv/GpuStatsInfo.h>

#include <vector>
@@ -55,6 +56,9 @@ public:

    // sets ANGLE as system GLES driver if enabled==true by setting persist.graphics.egl to true.
    virtual void toggleAngleAsSystemDriver(bool enabled) = 0;

    // Get the list of features to override.
    virtual FeatureOverrides getFeatureOverrides() = 0;
};

class BnGpuService : public BnInterface<IGpuService> {
@@ -67,6 +71,7 @@ public:
        TOGGLE_ANGLE_AS_SYSTEM_DRIVER,
        SET_TARGET_STATS_ARRAY,
        ADD_VULKAN_ENGINE_NAME,
        GET_FEATURE_CONFIG_OVERRIDES,
        // Always append new enum to the end.
    };

+9 −0
Original line number Diff line number Diff line
@@ -146,6 +146,15 @@ void GpuService::toggleAngleAsSystemDriver(bool enabled) {
    }
}

FeatureOverrides GpuService::getFeatureOverrides() {
    if (!graphicsenv_flags::feature_overrides()) {
        FeatureOverrides featureOverrides;
        return featureOverrides;
    }

    return mFeatureOverrideParser.getFeatureOverrides();
}

void GpuService::setUpdatableDriverPath(const std::string& driverPath) {
    IPCThreadState* ipc = IPCThreadState::self();
    const int pid = ipc->getCallingPid();
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <binder/IInterface.h>
#include <cutils/compiler.h>
#include <feature_override/FeatureOverrideParser.h>
#include <graphicsenv/FeatureOverrides.h>
#include <graphicsenv/GpuStatsInfo.h>
#include <graphicsenv/IGpuService.h>
#include <serviceutils/PriorityDumper.h>
@@ -64,6 +65,7 @@ private:
                        const uint64_t* values, const uint32_t valueCount) override;
    void setUpdatableDriverPath(const std::string& driverPath) override;
    std::string getUpdatableDriverPath() override;
    FeatureOverrides getFeatureOverrides() override;
    void toggleAngleAsSystemDriver(bool enabled) override;
    void addVulkanEngineName(const std::string& appPackageName, const uint64_t driverVersionCode,
                             const char *engineName) override;