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

Commit 361f1c01 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9401934 from b8d82b90 to udc-release

Change-Id: I6749009ee1386698f1d0b97061ba0eff9df80178
parents 51a23d8b b8d82b90
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -829,6 +829,8 @@ enum {
    AKEYCODE_STYLUS_BUTTON_TERTIARY = 310,
    /** A button on the tail end of a stylus. */
    AKEYCODE_STYLUS_BUTTON_TAIL = 311,
    /** Key to open recent apps (a.k.a. Overview) */
    AKEYCODE_RECENT_APPS = 312,

    // NOTE: If you add a new keycode here you must also add it to several other files.
    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
+32 −0
Original line number Diff line number Diff line
@@ -89,6 +89,14 @@ status_t GpuStatsAppInfo::writeToParcel(Parcel* parcel) const {
    if ((status = parcel->writeBool(falsePrerotation)) != OK) return status;
    if ((status = parcel->writeBool(gles1InUse)) != OK) return status;
    if ((status = parcel->writeBool(angleInUse)) != OK) return status;
    if ((status = parcel->writeBool(createdGlesContext)) != OK) return status;
    if ((status = parcel->writeBool(createdVulkanDevice)) != OK) return status;
    if ((status = parcel->writeBool(createdVulkanSwapchain)) != OK) return status;
    if ((status = parcel->writeUint32(vulkanApiVersion)) != OK) return status;
    if ((status = parcel->writeUint64(vulkanDeviceFeaturesEnabled)) != OK) return status;
    if ((status = parcel->writeInt32Vector(vulkanInstanceExtensions)) != OK) return status;
    if ((status = parcel->writeInt32Vector(vulkanDeviceExtensions)) != OK) return status;

    return OK;
}

@@ -103,6 +111,14 @@ status_t GpuStatsAppInfo::readFromParcel(const Parcel* parcel) {
    if ((status = parcel->readBool(&falsePrerotation)) != OK) return status;
    if ((status = parcel->readBool(&gles1InUse)) != OK) return status;
    if ((status = parcel->readBool(&angleInUse)) != OK) return status;
    if ((status = parcel->readBool(&createdGlesContext)) != OK) return status;
    if ((status = parcel->readBool(&createdVulkanDevice)) != OK) return status;
    if ((status = parcel->readBool(&createdVulkanSwapchain)) != OK) return status;
    if ((status = parcel->readUint32(&vulkanApiVersion)) != OK) return status;
    if ((status = parcel->readUint64(&vulkanDeviceFeaturesEnabled)) != OK) return status;
    if ((status = parcel->readInt32Vector(&vulkanInstanceExtensions)) != OK) return status;
    if ((status = parcel->readInt32Vector(&vulkanDeviceExtensions)) != OK) return status;

    return OK;
}

@@ -114,6 +130,12 @@ std::string GpuStatsAppInfo::toString() const {
    StringAppendF(&result, "falsePrerotation = %d\n", falsePrerotation);
    StringAppendF(&result, "gles1InUse = %d\n", gles1InUse);
    StringAppendF(&result, "angleInUse = %d\n", angleInUse);
    StringAppendF(&result, "createdGlesContext = %d\n", createdGlesContext);
    StringAppendF(&result, "createdVulkanDevice = %d\n", createdVulkanDevice);
    StringAppendF(&result, "createdVulkanSwapchain = %d\n", createdVulkanSwapchain);
    StringAppendF(&result, "vulkanApiVersion = 0x%" PRIx32 "\n", vulkanApiVersion);
    StringAppendF(&result, "vulkanDeviceFeaturesEnabled = 0x%" PRIx64 "\n",
                  vulkanDeviceFeaturesEnabled);
    result.append("glDriverLoadingTime:");
    for (int32_t loadingTime : glDriverLoadingTime) {
        StringAppendF(&result, " %d", loadingTime);
@@ -129,6 +151,16 @@ std::string GpuStatsAppInfo::toString() const {
        StringAppendF(&result, " %d", loadingTime);
    }
    result.append("\n");
    result.append("vulkanInstanceExtensions:");
    for (int32_t extension : vulkanInstanceExtensions) {
        StringAppendF(&result, " 0x%x", extension);
    }
    result.append("\n");
    result.append("vulkanDeviceExtensions:");
    for (int32_t extension : vulkanDeviceExtensions) {
        StringAppendF(&result, " 0x%x", extension);
    }
    result.append("\n");
    return result;
}

+58 −2
Original line number Diff line number Diff line
@@ -259,6 +259,57 @@ void GraphicsEnv::setDriverLoaded(GpuStatsInfo::Api api, bool isDriverLoaded,
    sendGpuStatsLocked(api, isDriverLoaded, driverLoadingTime);
}

// Hash function to calculate hash for null-terminated Vulkan extension names
// We store hash values of the extensions, rather than the actual names or
// indices to be able to support new extensions easily, avoid creating
// a table of 'known' extensions inside Android and reduce the runtime overhead.
static uint64_t calculateExtensionHash(const char* word) {
    if (!word) {
        return 0;
    }
    const size_t wordLen = strlen(word);
    const uint32_t seed = 167;
    uint64_t hash = 0;
    for (size_t i = 0; i < wordLen; i++) {
        hash = (hash * seed) + word[i];
    }
    return hash;
}

void GraphicsEnv::setVulkanInstanceExtensions(uint32_t enabledExtensionCount,
                                              const char* const* ppEnabledExtensionNames) {
    ATRACE_CALL();
    if (enabledExtensionCount == 0 || ppEnabledExtensionNames == nullptr) {
        return;
    }

    const uint32_t maxNumStats = android::GpuStatsAppInfo::MAX_NUM_EXTENSIONS;
    uint64_t extensionHashes[maxNumStats];
    const uint32_t numStats = std::min(enabledExtensionCount, maxNumStats);
    for(uint32_t i = 0; i < numStats; i++) {
        extensionHashes[i] = calculateExtensionHash(ppEnabledExtensionNames[i]);
    }
    setTargetStatsArray(android::GpuStatsInfo::Stats::VULKAN_INSTANCE_EXTENSION,
                        extensionHashes, numStats);
}

void GraphicsEnv::setVulkanDeviceExtensions(uint32_t enabledExtensionCount,
                                            const char* const* ppEnabledExtensionNames) {
    ATRACE_CALL();
    if (enabledExtensionCount == 0 || ppEnabledExtensionNames == nullptr) {
        return;
    }

    const uint32_t maxNumStats = android::GpuStatsAppInfo::MAX_NUM_EXTENSIONS;
    uint64_t extensionHashes[maxNumStats];
    const uint32_t numStats = std::min(enabledExtensionCount, maxNumStats);
    for(uint32_t i = 0; i < numStats; i++) {
        extensionHashes[i] = calculateExtensionHash(ppEnabledExtensionNames[i]);
    }
    setTargetStatsArray(android::GpuStatsInfo::Stats::VULKAN_DEVICE_EXTENSION,
                        extensionHashes, numStats);
}

static sp<IGpuService> getGpuService() {
    static const sp<IBinder> binder = defaultServiceManager()->checkService(String16("gpu"));
    if (!binder) {
@@ -276,6 +327,11 @@ bool GraphicsEnv::readyToSendGpuStatsLocked() {
}

void GraphicsEnv::setTargetStats(const GpuStatsInfo::Stats stats, const uint64_t value) {
    return setTargetStatsArray(stats, &value, 1);
}

void GraphicsEnv::setTargetStatsArray(const GpuStatsInfo::Stats stats, const uint64_t* values,
                                      const uint32_t valueCount) {
    ATRACE_CALL();

    std::lock_guard<std::mutex> lock(mStatsLock);
@@ -283,8 +339,8 @@ void GraphicsEnv::setTargetStats(const GpuStatsInfo::Stats stats, const uint64_t

    const sp<IGpuService> gpuService = getGpuService();
    if (gpuService) {
        gpuService->setTargetStats(mGpuStats.appPackageName, mGpuStats.driverVersionCode, stats,
                                   value);
        gpuService->setTargetStatsArray(mGpuStats.appPackageName, mGpuStats.driverVersionCode,
                                        stats, values, valueCount);
    }
}

+8 −0
Original line number Diff line number Diff line
@@ -61,6 +61,14 @@ public:
        remote()->transact(BnGpuService::SET_TARGET_STATS, data, &reply, IBinder::FLAG_ONEWAY);
    }

    void setTargetStatsArray(const std::string& appPackageName, const uint64_t driverVersionCode,
                             const GpuStatsInfo::Stats stats, const uint64_t* values,
                             const uint32_t valueCount) override {
        for (uint32_t i = 0; i < valueCount; i++) {
            setTargetStats(appPackageName, driverVersionCode, stats, values[i]);
        }
    }

    void setUpdatableDriverPath(const std::string& driverPath) override {
        Parcel data, reply;
        data.writeInterfaceToken(IGpuService::getInterfaceDescriptor());
+17 −0
Original line number Diff line number Diff line
@@ -58,6 +58,9 @@ public:
 */
class GpuStatsAppInfo : public Parcelable {
public:
    // This limits the worst case number of extensions to be tracked.
    static const uint32_t MAX_NUM_EXTENSIONS = 100;

    GpuStatsAppInfo() = default;
    GpuStatsAppInfo(const GpuStatsAppInfo&) = default;
    virtual ~GpuStatsAppInfo() = default;
@@ -74,6 +77,13 @@ public:
    bool falsePrerotation = false;
    bool gles1InUse = false;
    bool angleInUse = false;
    bool createdGlesContext = false;
    bool createdVulkanDevice = false;
    bool createdVulkanSwapchain = false;
    uint32_t vulkanApiVersion = 0;
    uint64_t vulkanDeviceFeaturesEnabled = 0;
    std::vector<int32_t> vulkanInstanceExtensions = {};
    std::vector<int32_t> vulkanDeviceExtensions = {};

    std::chrono::time_point<std::chrono::system_clock> lastAccessTime;
};
@@ -101,6 +111,13 @@ public:
        CPU_VULKAN_IN_USE = 0,
        FALSE_PREROTATION = 1,
        GLES_1_IN_USE = 2,
        CREATED_GLES_CONTEXT = 3,
        CREATED_VULKAN_API_VERSION = 4,
        CREATED_VULKAN_DEVICE = 5,
        CREATED_VULKAN_SWAPCHAIN = 6,
        VULKAN_DEVICE_FEATURES_ENABLED = 7,
        VULKAN_INSTANCE_EXTENSION = 8,
        VULKAN_DEVICE_EXTENSION = 9,
    };

    GpuStatsInfo() = default;
Loading