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

Commit 174a2a0e authored by Yiwei Zhang's avatar Yiwei Zhang
Browse files

GpuStats: plumb all 3d api versions

Bug: 131866357
Test: adb shell dumpsys gpu
Change-Id: I2ef57cb61f51f380745c2ea363b36f093befc313
parent 794d295a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ status_t GpuStatsGlobalInfo::writeToParcel(Parcel* parcel) const {
    if ((status = parcel->writeInt32(vkLoadingCount)) != OK) return status;
    if ((status = parcel->writeInt32(vkLoadingFailureCount)) != OK) return status;
    if ((status = parcel->writeInt32(vulkanVersion)) != OK) return status;
    if ((status = parcel->writeInt32(cpuVulkanVersion)) != OK) return status;
    if ((status = parcel->writeInt32(glesVersion)) != OK) return status;
    return OK;
}

@@ -49,6 +51,8 @@ status_t GpuStatsGlobalInfo::readFromParcel(const Parcel* parcel) {
    if ((status = parcel->readInt32(&vkLoadingCount)) != OK) return status;
    if ((status = parcel->readInt32(&vkLoadingFailureCount)) != OK) return status;
    if ((status = parcel->readInt32(&vulkanVersion)) != OK) return status;
    if ((status = parcel->readInt32(&cpuVulkanVersion)) != OK) return status;
    if ((status = parcel->readInt32(&glesVersion)) != OK) return status;
    return OK;
}

@@ -63,6 +67,8 @@ std::string GpuStatsGlobalInfo::toString() const {
    StringAppendF(&result, "vkLoadingCount = %d\n", vkLoadingCount);
    StringAppendF(&result, "vkLoadingFailureCount = %d\n", vkLoadingFailureCount);
    StringAppendF(&result, "vulkanVersion = %d\n", vulkanVersion);
    StringAppendF(&result, "cpuVulkanVersion = %d\n", cpuVulkanVersion);
    StringAppendF(&result, "glesVersion = %d\n", glesVersion);
    return result;
}

+2 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ public:
    int32_t vkLoadingCount = 0;
    int32_t vkLoadingFailureCount = 0;
    int32_t vulkanVersion = 0;
    int32_t cpuVulkanVersion = 0;
    int32_t glesVersion = 0;
};

/*
+17 −2
Original line number Diff line number Diff line
@@ -19,11 +19,12 @@

#include "GpuStats.h"

#include <unordered_set>

#include <cutils/properties.h>
#include <log/log.h>
#include <utils/Trace.h>

#include <unordered_set>

namespace android {

static bool addLoadingCount(GraphicsEnv::Driver driver, bool isDriverLoaded,
@@ -120,6 +121,16 @@ void GpuStats::insert(const std::string& driverPackageName, const std::string& d
    addLoadingTime(driver, driverLoadingTime, &mAppStats[appStatsKey]);
}

void GpuStats::interceptSystemDriverStatsLocked() {
    // Append cpuVulkanVersion and glesVersion to system driver stats
    if (!mGlobalStats.count(0) || mGlobalStats[0].glesVersion) {
        return;
    }

    mGlobalStats[0].cpuVulkanVersion = property_get_int32("ro.cpuvulkan.version", 0);
    mGlobalStats[0].glesVersion = property_get_int32("ro.opengles.version", 0);
}

void GpuStats::dump(const Vector<String16>& args, std::string* result) {
    ATRACE_CALL();

@@ -176,6 +187,8 @@ void GpuStats::dump(const Vector<String16>& args, std::string* result) {
}

void GpuStats::dumpGlobalLocked(std::string* result) {
    interceptSystemDriverStatsLocked();

    for (const auto& ele : mGlobalStats) {
        result->append(ele.second.toString());
        result->append("\n");
@@ -196,6 +209,8 @@ void GpuStats::pullGlobalStats(std::vector<GpuStatsGlobalInfo>* outStats) {
    outStats->clear();
    outStats->reserve(mGlobalStats.size());

    interceptSystemDriverStatsLocked();

    for (const auto& ele : mGlobalStats) {
        outStats->emplace_back(ele.second);
    }
+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,8 @@ private:
    void dumpGlobalLocked(std::string* result);
    // Dump app stats
    void dumpAppLocked(std::string* result);
    // Append cpuVulkanVersion and glesVersion to system driver stats
    void interceptSystemDriverStatsLocked();

    // Below limits the memory usage of GpuStats to be less than 10KB. This is
    // the preferred number for statsd while maintaining nice data quality.