Merge "Zero-initialize HIDL structs before passing" into qt-dev
diff --git a/cmds/atrace/atrace.cpp b/cmds/atrace/atrace.cpp
index 5836f11..7ac0eb7 100644
--- a/cmds/atrace/atrace.cpp
+++ b/cmds/atrace/atrace.cpp
@@ -62,7 +62,7 @@
using std::string;
-#define MAX_SYS_FILES 10
+#define MAX_SYS_FILES 11
const char* k_traceTagsProperty = "debug.atrace.tags.enableflags";
const char* k_userInitiatedTraceProperty = "debug.atrace.user_initiated";
@@ -133,7 +133,11 @@
{ OPT, "events/sched/sched_blocked_reason/enable" },
{ OPT, "events/sched/sched_cpu_hotplug/enable" },
{ OPT, "events/sched/sched_pi_setprio/enable" },
+ { OPT, "events/sched/sched_process_exit/enable" },
{ OPT, "events/cgroup/enable" },
+ { OPT, "events/oom/oom_score_adj_update/enable" },
+ { OPT, "events/task/task_rename/enable" },
+ { OPT, "events/task/task_newtask/enable" },
} },
{ "irq", "IRQ Events", 0, {
{ REQ, "events/irq/enable" },
@@ -231,10 +235,6 @@
{ OPT, "events/kmem/rss_stat/enable" },
{ OPT, "events/kmem/ion_heap_grow/enable" },
{ OPT, "events/kmem/ion_heap_shrink/enable" },
- { OPT, "events/oom/oom_score_adj_update/enable" },
- { OPT, "events/sched/sched_process_exit/enable" },
- { OPT, "events/task/task_rename/enable" },
- { OPT, "events/task/task_newtask/enable" },
} },
};
diff --git a/cmds/atrace/atrace.rc b/cmds/atrace/atrace.rc
index 7c58a85..032d072 100644
--- a/cmds/atrace/atrace.rc
+++ b/cmds/atrace/atrace.rc
@@ -33,6 +33,8 @@
chmod 0666 /sys/kernel/tracing/events/sched/sched_cpu_hotplug/enable
chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_pi_setprio/enable
chmod 0666 /sys/kernel/tracing/events/sched/sched_pi_setprio/enable
+ chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable
+ chmod 0666 /sys/kernel/tracing/events/sched/sched_process_exit/enable
chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_waking/enable
chmod 0666 /sys/kernel/tracing/events/sched/sched_waking/enable
chmod 0666 /sys/kernel/debug/tracing/events/cgroup/enable
diff --git a/libs/graphicsenv/GpuStatsInfo.cpp b/libs/graphicsenv/GpuStatsInfo.cpp
index 0fa0d9e..f89b4c1 100644
--- a/libs/graphicsenv/GpuStatsInfo.cpp
+++ b/libs/graphicsenv/GpuStatsInfo.cpp
@@ -34,6 +34,9 @@
if ((status = parcel->writeInt32(glLoadingFailureCount)) != OK) return status;
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;
}
@@ -47,6 +50,9 @@
if ((status = parcel->readInt32(&glLoadingFailureCount)) != OK) return status;
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;
}
@@ -60,6 +66,9 @@
StringAppendF(&result, "glLoadingFailureCount = %d\n", glLoadingFailureCount);
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;
}
diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp
index 13c0d87..8728f03 100644
--- a/libs/graphicsenv/GraphicsEnv.cpp
+++ b/libs/graphicsenv/GraphicsEnv.cpp
@@ -162,7 +162,8 @@
void GraphicsEnv::setGpuStats(const std::string& driverPackageName,
const std::string& driverVersionName, uint64_t driverVersionCode,
- int64_t driverBuildTime, const std::string& appPackageName) {
+ int64_t driverBuildTime, const std::string& appPackageName,
+ const int vulkanVersion) {
ATRACE_CALL();
std::lock_guard<std::mutex> lock(mStatsLock);
@@ -171,15 +172,17 @@
"\tdriverVersionName[%s]\n"
"\tdriverVersionCode[%" PRIu64 "]\n"
"\tdriverBuildTime[%" PRId64 "]\n"
- "\tappPackageName[%s]\n",
+ "\tappPackageName[%s]\n"
+ "\tvulkanVersion[%d]\n",
driverPackageName.c_str(), driverVersionName.c_str(), driverVersionCode, driverBuildTime,
- appPackageName.c_str());
+ appPackageName.c_str(), vulkanVersion);
mGpuStats.driverPackageName = driverPackageName;
mGpuStats.driverVersionName = driverVersionName;
mGpuStats.driverVersionCode = driverVersionCode;
mGpuStats.driverBuildTime = driverBuildTime;
mGpuStats.appPackageName = appPackageName;
+ mGpuStats.vulkanVersion = vulkanVersion;
}
void GraphicsEnv::setDriverToLoad(GraphicsEnv::Driver driver) {
@@ -270,19 +273,20 @@
"\tdriverVersionCode[%" PRIu64 "]\n"
"\tdriverBuildTime[%" PRId64 "]\n"
"\tappPackageName[%s]\n"
+ "\tvulkanVersion[%d]\n"
"\tdriver[%d]\n"
"\tisDriverLoaded[%d]\n"
"\tdriverLoadingTime[%" PRId64 "]",
mGpuStats.driverPackageName.c_str(), mGpuStats.driverVersionName.c_str(),
mGpuStats.driverVersionCode, mGpuStats.driverBuildTime, mGpuStats.appPackageName.c_str(),
- static_cast<int32_t>(driver), isDriverLoaded, driverLoadingTime);
+ mGpuStats.vulkanVersion, static_cast<int32_t>(driver), isDriverLoaded, driverLoadingTime);
const sp<IGpuService> gpuService = getGpuService();
if (gpuService) {
gpuService->setGpuStats(mGpuStats.driverPackageName, mGpuStats.driverVersionName,
mGpuStats.driverVersionCode, mGpuStats.driverBuildTime,
- mGpuStats.appPackageName, driver, isDriverLoaded,
- driverLoadingTime);
+ mGpuStats.appPackageName, mGpuStats.vulkanVersion, driver,
+ isDriverLoaded, driverLoadingTime);
}
}
diff --git a/libs/graphicsenv/IGpuService.cpp b/libs/graphicsenv/IGpuService.cpp
index 1dc1c0e..100dca5 100644
--- a/libs/graphicsenv/IGpuService.cpp
+++ b/libs/graphicsenv/IGpuService.cpp
@@ -30,8 +30,8 @@
virtual void setGpuStats(const std::string& driverPackageName,
const std::string& driverVersionName, uint64_t driverVersionCode,
int64_t driverBuildTime, const std::string& appPackageName,
- GraphicsEnv::Driver driver, bool isDriverLoaded,
- int64_t driverLoadingTime) {
+ const int32_t vulkanVersion, GraphicsEnv::Driver driver,
+ bool isDriverLoaded, int64_t driverLoadingTime) {
Parcel data, reply;
data.writeInterfaceToken(IGpuService::getInterfaceDescriptor());
@@ -40,6 +40,7 @@
data.writeUint64(driverVersionCode);
data.writeInt64(driverBuildTime);
data.writeUtf8AsUtf16(appPackageName);
+ data.writeInt32(vulkanVersion);
data.writeInt32(static_cast<int32_t>(driver));
data.writeBool(isDriverLoaded);
data.writeInt64(driverLoadingTime);
@@ -118,6 +119,9 @@
std::string appPackageName;
if ((status = data.readUtf8FromUtf16(&appPackageName)) != OK) return status;
+ int32_t vulkanVersion;
+ if ((status = data.readInt32(&vulkanVersion)) != OK) return status;
+
int32_t driver;
if ((status = data.readInt32(&driver)) != OK) return status;
@@ -128,8 +132,8 @@
if ((status = data.readInt64(&driverLoadingTime)) != OK) return status;
setGpuStats(driverPackageName, driverVersionName, driverVersionCode, driverBuildTime,
- appPackageName, static_cast<GraphicsEnv::Driver>(driver), isDriverLoaded,
- driverLoadingTime);
+ appPackageName, vulkanVersion, static_cast<GraphicsEnv::Driver>(driver),
+ isDriverLoaded, driverLoadingTime);
return OK;
}
diff --git a/libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h b/libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h
index a92ca70..98ab02b 100644
--- a/libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h
+++ b/libs/graphicsenv/include/graphicsenv/GpuStatsInfo.h
@@ -44,6 +44,9 @@
int32_t glLoadingFailureCount = 0;
int32_t vkLoadingCount = 0;
int32_t vkLoadingFailureCount = 0;
+ int32_t vulkanVersion = 0;
+ int32_t cpuVulkanVersion = 0;
+ int32_t glesVersion = 0;
};
/*
diff --git a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
index cb4239f..b10cab7 100644
--- a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
+++ b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
@@ -50,6 +50,7 @@
uint64_t driverVersionCode;
int64_t driverBuildTime;
std::string appPackageName;
+ int32_t vulkanVersion;
Driver glDriverToLoad;
Driver glDriverFallback;
Driver vkDriverToLoad;
@@ -61,6 +62,7 @@
driverVersionCode(0),
driverBuildTime(0),
appPackageName(""),
+ vulkanVersion(0),
glDriverToLoad(Driver::NONE),
glDriverFallback(Driver::NONE),
vkDriverToLoad(Driver::NONE),
@@ -84,7 +86,7 @@
android_namespace_t* getDriverNamespace();
void setGpuStats(const std::string& driverPackageName, const std::string& driverVersionName,
uint64_t versionCode, int64_t driverBuildTime,
- const std::string& appPackageName);
+ const std::string& appPackageName, const int32_t vulkanVersion);
void setDriverToLoad(Driver driver);
void setDriverLoaded(Api api, bool isDriverLoaded, int64_t driverLoadingTime);
void clearDriverLoadingInfo(Api api);
diff --git a/libs/graphicsenv/include/graphicsenv/IGpuService.h b/libs/graphicsenv/include/graphicsenv/IGpuService.h
index ac022b5..5bf0269 100644
--- a/libs/graphicsenv/include/graphicsenv/IGpuService.h
+++ b/libs/graphicsenv/include/graphicsenv/IGpuService.h
@@ -37,8 +37,8 @@
virtual void setGpuStats(const std::string& driverPackageName,
const std::string& driverVersionName, uint64_t driverVersionCode,
int64_t driverBuildTime, const std::string& appPackageName,
- GraphicsEnv::Driver driver, bool isDriverLoaded,
- int64_t driverLoadingTime) = 0;
+ const int32_t vulkanVersion, GraphicsEnv::Driver driver,
+ bool isDriverLoaded, int64_t driverLoadingTime) = 0;
// get GPU global stats from GpuStats module.
virtual status_t getGpuStatsGlobalInfo(std::vector<GpuStatsGlobalInfo>* outStats) const = 0;
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index d87228f..5fb3f0b 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -59,13 +59,6 @@
}
}
-void BufferQueue::ProxyConsumerListener::onBufferAllocated(const BufferItem& item) {
- sp<ConsumerListener> listener(mConsumerListener.promote());
- if (listener != nullptr) {
- listener->onBufferAllocated(item);
- }
-}
-
void BufferQueue::ProxyConsumerListener::onBuffersReleased() {
sp<ConsumerListener> listener(mConsumerListener.promote());
if (listener != nullptr) {
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index c94c6b3..3928bb9 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -539,13 +539,6 @@
return NO_INIT;
}
- if (mCore->mConsumerListener != nullptr) {
- BufferItem item;
- item.mGraphicBuffer = graphicBuffer;
- item.mSlot = *outSlot;
- mCore->mConsumerListener->onBufferAllocated(item);
- }
-
VALIDATE_CONSISTENCY();
} // Autolock scope
}
@@ -975,9 +968,6 @@
item.mGraphicBuffer.clear();
}
- // Don't send the slot number through the callback since the consumer shouldn't need it
- item.mSlot = BufferItem::INVALID_BUFFER_SLOT;
-
// Call back without the main BufferQueue lock held, but with the callback
// lock held so we can ensure that callbacks occur in order
@@ -1433,13 +1423,6 @@
BQ_LOGV("allocateBuffers: allocated a new buffer in slot %d",
*slot);
- if (mCore->mConsumerListener != nullptr) {
- BufferItem item;
- item.mGraphicBuffer = buffers[i];
- item.mSlot = *slot;
- mCore->mConsumerListener->onBufferAllocated(item);
- }
-
// Make sure the erase is done after all uses of the slot
// iterator since it will be invalid after this point.
mCore->mFreeSlots.erase(slot);
diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp
index 1e94cc1..abd9921 100644
--- a/libs/gui/ConsumerBase.cpp
+++ b/libs/gui/ConsumerBase.cpp
@@ -131,8 +131,6 @@
}
}
-void ConsumerBase::onBufferAllocated(const BufferItem& /*item*/) {}
-
void ConsumerBase::onBuffersReleased() {
Mutex::Autolock lock(mMutex);
diff --git a/libs/gui/IConsumerListener.cpp b/libs/gui/IConsumerListener.cpp
index ea9045c..85ac304 100644
--- a/libs/gui/IConsumerListener.cpp
+++ b/libs/gui/IConsumerListener.cpp
@@ -28,8 +28,7 @@
ON_FRAME_REPLACED,
ON_BUFFERS_RELEASED,
ON_SIDEBAND_STREAM_CHANGED,
- ON_BUFFER_ALLOCATED,
- LAST = ON_BUFFER_ALLOCATED,
+ LAST = ON_SIDEBAND_STREAM_CHANGED,
};
} // Anonymous namespace
@@ -55,11 +54,6 @@
item);
}
- void onBufferAllocated(const BufferItem& item) override {
- callRemoteAsync<decltype(&IConsumerListener::onBufferAllocated)>(Tag::ON_BUFFER_ALLOCATED,
- item);
- }
-
void onBuffersReleased() override {
callRemoteAsync<decltype(&IConsumerListener::onBuffersReleased)>(Tag::ON_BUFFERS_RELEASED);
}
@@ -95,8 +89,6 @@
return callLocalAsync(data, reply, &IConsumerListener::onFrameAvailable);
case Tag::ON_FRAME_REPLACED:
return callLocalAsync(data, reply, &IConsumerListener::onFrameReplaced);
- case Tag::ON_BUFFER_ALLOCATED:
- return callLocalAsync(data, reply, &IConsumerListener::onBufferAllocated);
case Tag::ON_BUFFERS_RELEASED:
return callLocalAsync(data, reply, &IConsumerListener::onBuffersReleased);
case Tag::ON_SIDEBAND_STREAM_CHANGED:
diff --git a/libs/gui/include/gui/BufferQueue.h b/libs/gui/include/gui/BufferQueue.h
index 721427b..da95274 100644
--- a/libs/gui/include/gui/BufferQueue.h
+++ b/libs/gui/include/gui/BufferQueue.h
@@ -61,7 +61,6 @@
void onDisconnect() override;
void onFrameAvailable(const BufferItem& item) override;
void onFrameReplaced(const BufferItem& item) override;
- void onBufferAllocated(const BufferItem& item) override;
void onBuffersReleased() override;
void onSidebandStreamChanged() override;
void addAndGetFrameTimestamps(
diff --git a/libs/gui/include/gui/ConsumerBase.h b/libs/gui/include/gui/ConsumerBase.h
index 7c26482..366ced3 100644
--- a/libs/gui/include/gui/ConsumerBase.h
+++ b/libs/gui/include/gui/ConsumerBase.h
@@ -141,7 +141,6 @@
// classes if they want the notification.
virtual void onFrameAvailable(const BufferItem& item) override;
virtual void onFrameReplaced(const BufferItem& item) override;
- virtual void onBufferAllocated(const BufferItem& item) override;
virtual void onBuffersReleased() override;
virtual void onSidebandStreamChanged() override;
diff --git a/libs/gui/include/gui/IConsumerListener.h b/libs/gui/include/gui/IConsumerListener.h
index 03fefbe..c082882 100644
--- a/libs/gui/include/gui/IConsumerListener.h
+++ b/libs/gui/include/gui/IConsumerListener.h
@@ -61,13 +61,6 @@
// This is called without any lock held and can be called concurrently by multiple threads.
virtual void onFrameReplaced(const BufferItem& /* item */) {} /* Asynchronous */
- // onBufferAllocated is called to notify the buffer consumer that the BufferQueue has allocated
- // a GraphicBuffer for a particular slot. Only the GraphicBuffer pointer and the slot ID will
- // be populated.
- //
- // This is called without any lock held and can be called concurrently by multiple threads.
- virtual void onBufferAllocated(const BufferItem& /* item */) {} /* Asynchronous */
-
// onBuffersReleased is called to notify the buffer consumer that the BufferQueue has released
// its references to one or more GraphicBuffers contained in its slots. The buffer consumer
// should then call BufferQueue::getReleasedBuffers to retrieve the list of buffers.
diff --git a/services/gpuservice/GpuService.cpp b/services/gpuservice/GpuService.cpp
index 59fa1c0..b42884e 100644
--- a/services/gpuservice/GpuService.cpp
+++ b/services/gpuservice/GpuService.cpp
@@ -51,12 +51,12 @@
void GpuService::setGpuStats(const std::string& driverPackageName,
const std::string& driverVersionName, uint64_t driverVersionCode,
int64_t driverBuildTime, const std::string& appPackageName,
- GraphicsEnv::Driver driver, bool isDriverLoaded,
- int64_t driverLoadingTime) {
+ const int32_t vulkanVersion, GraphicsEnv::Driver driver,
+ bool isDriverLoaded, int64_t driverLoadingTime) {
ATRACE_CALL();
mGpuStats->insert(driverPackageName, driverVersionName, driverVersionCode, driverBuildTime,
- appPackageName, driver, isDriverLoaded, driverLoadingTime);
+ appPackageName, vulkanVersion, driver, isDriverLoaded, driverLoadingTime);
}
status_t GpuService::getGpuStatsGlobalInfo(std::vector<GpuStatsGlobalInfo>* outStats) const {
diff --git a/services/gpuservice/GpuService.h b/services/gpuservice/GpuService.h
index 7a9b2d4..3e02b4a 100644
--- a/services/gpuservice/GpuService.h
+++ b/services/gpuservice/GpuService.h
@@ -45,8 +45,9 @@
*/
void setGpuStats(const std::string& driverPackageName, const std::string& driverVersionName,
uint64_t driverVersionCode, int64_t driverBuildTime,
- const std::string& appPackageName, GraphicsEnv::Driver driver,
- bool isDriverLoaded, int64_t driverLoadingTime) override;
+ const std::string& appPackageName, const int32_t vulkanVersion,
+ GraphicsEnv::Driver driver, bool isDriverLoaded,
+ int64_t driverLoadingTime) override;
status_t getGpuStatsGlobalInfo(std::vector<GpuStatsGlobalInfo>* outStats) const override;
status_t getGpuStatsAppInfo(std::vector<GpuStatsAppInfo>* outStats) const override;
diff --git a/services/gpuservice/gpustats/GpuStats.cpp b/services/gpuservice/gpustats/GpuStats.cpp
index 6185305..5174c86 100644
--- a/services/gpuservice/gpustats/GpuStats.cpp
+++ b/services/gpuservice/gpustats/GpuStats.cpp
@@ -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,
@@ -68,8 +69,8 @@
void GpuStats::insert(const std::string& driverPackageName, const std::string& driverVersionName,
uint64_t driverVersionCode, int64_t driverBuildTime,
- const std::string& appPackageName, GraphicsEnv::Driver driver,
- bool isDriverLoaded, int64_t driverLoadingTime) {
+ const std::string& appPackageName, const int32_t vulkanVersion,
+ GraphicsEnv::Driver driver, bool isDriverLoaded, int64_t driverLoadingTime) {
ATRACE_CALL();
std::lock_guard<std::mutex> lock(mLock);
@@ -79,11 +80,13 @@
"\tdriverVersionCode[%" PRIu64 "]\n"
"\tdriverBuildTime[%" PRId64 "]\n"
"\tappPackageName[%s]\n"
+ "\tvulkanVersion[%d]\n"
"\tdriver[%d]\n"
"\tisDriverLoaded[%d]\n"
"\tdriverLoadingTime[%" PRId64 "]",
driverPackageName.c_str(), driverVersionName.c_str(), driverVersionCode, driverBuildTime,
- appPackageName.c_str(), static_cast<int32_t>(driver), isDriverLoaded, driverLoadingTime);
+ appPackageName.c_str(), vulkanVersion, static_cast<int32_t>(driver), isDriverLoaded,
+ driverLoadingTime);
if (!mGlobalStats.count(driverVersionCode)) {
GpuStatsGlobalInfo globalInfo;
@@ -94,6 +97,7 @@
globalInfo.driverVersionName = driverVersionName;
globalInfo.driverVersionCode = driverVersionCode;
globalInfo.driverBuildTime = driverBuildTime;
+ globalInfo.vulkanVersion = vulkanVersion;
mGlobalStats.insert({driverVersionCode, globalInfo});
} else if (!addLoadingCount(driver, isDriverLoaded, &mGlobalStats[driverVersionCode])) {
return;
@@ -117,6 +121,16 @@
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();
@@ -173,6 +187,8 @@
}
void GpuStats::dumpGlobalLocked(std::string* result) {
+ interceptSystemDriverStatsLocked();
+
for (const auto& ele : mGlobalStats) {
result->append(ele.second.toString());
result->append("\n");
@@ -193,6 +209,8 @@
outStats->clear();
outStats->reserve(mGlobalStats.size());
+ interceptSystemDriverStatsLocked();
+
for (const auto& ele : mGlobalStats) {
outStats->emplace_back(ele.second);
}
diff --git a/services/gpuservice/gpustats/GpuStats.h b/services/gpuservice/gpustats/GpuStats.h
index d942154..49699ee 100644
--- a/services/gpuservice/gpustats/GpuStats.h
+++ b/services/gpuservice/gpustats/GpuStats.h
@@ -35,8 +35,8 @@
// Insert new gpu stats into global stats and app stats.
void insert(const std::string& driverPackageName, const std::string& driverVersionName,
uint64_t driverVersionCode, int64_t driverBuildTime,
- const std::string& appPackageName, GraphicsEnv::Driver driver, bool isDriverLoaded,
- int64_t driverLoadingTime);
+ const std::string& appPackageName, const int32_t vulkanVersion,
+ GraphicsEnv::Driver driver, bool isDriverLoaded, int64_t driverLoadingTime);
// dumpsys interface
void dump(const Vector<String16>& args, std::string* result);
// Pull gpu global stats
@@ -52,6 +52,8 @@
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.
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp
index fc98dc8..6709fb4 100644
--- a/services/surfaceflinger/BufferLayerConsumer.cpp
+++ b/services/surfaceflinger/BufferLayerConsumer.cpp
@@ -478,20 +478,15 @@
}
}
-void BufferLayerConsumer::onBufferAllocated(const BufferItem& item) {
- if (item.mGraphicBuffer != nullptr) {
- std::shared_ptr<Image> image = std::make_shared<Image>(item.mGraphicBuffer, mRE);
- std::shared_ptr<Image> oldImage;
- {
- std::lock_guard<std::mutex> lock(mImagesMutex);
- oldImage = mImages[item.mSlot];
- if (oldImage == nullptr || oldImage->graphicBuffer() == nullptr ||
- oldImage->graphicBuffer()->getId() != item.mGraphicBuffer->getId()) {
- mImages[item.mSlot] = std::make_shared<Image>(item.mGraphicBuffer, mRE);
- }
- image = mImages[item.mSlot];
+void BufferLayerConsumer::onBufferAvailable(const BufferItem& item) {
+ if (item.mGraphicBuffer != nullptr && item.mSlot != BufferQueue::INVALID_BUFFER_SLOT) {
+ std::lock_guard<std::mutex> lock(mImagesMutex);
+ const std::shared_ptr<Image>& oldImage = mImages[item.mSlot];
+ if (oldImage == nullptr || oldImage->graphicBuffer() == nullptr ||
+ oldImage->graphicBuffer()->getId() != item.mGraphicBuffer->getId()) {
+ mImages[item.mSlot] = std::make_shared<Image>(item.mGraphicBuffer, mRE);
+ mRE.cacheExternalTextureBuffer(item.mGraphicBuffer);
}
- mRE.cacheExternalTextureBuffer(image->graphicBuffer());
}
}
@@ -533,5 +528,4 @@
mRE.unbindExternalTextureBuffer(mGraphicBuffer->getId());
}
}
-
}; // namespace android
diff --git a/services/surfaceflinger/BufferLayerConsumer.h b/services/surfaceflinger/BufferLayerConsumer.h
index 0f0655d..e3f6100 100644
--- a/services/surfaceflinger/BufferLayerConsumer.h
+++ b/services/surfaceflinger/BufferLayerConsumer.h
@@ -176,6 +176,7 @@
// setConsumerUsageBits overrides the ConsumerBase method to OR
// DEFAULT_USAGE_FLAGS to usage.
status_t setConsumerUsageBits(uint64_t usage);
+ void onBufferAvailable(const BufferItem& item) EXCLUDES(mImagesMutex);
protected:
// abandonLocked overrides the ConsumerBase method to clear
@@ -241,7 +242,6 @@
// IConsumerListener interface
void onDisconnect() override;
- void onBufferAllocated(const BufferItem& item) override EXCLUDES(mImagesMutex);
void onSidebandStreamChanged() override;
void addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps,
FrameEventHistoryDelta* outDelta) override;
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index 5d729f5..3d51ec3 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -14,6 +14,9 @@
* limitations under the License.
*/
+#undef LOG_TAG
+#define LOG_TAG "BufferQueueLayer"
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
#include <compositionengine/Display.h>
#include <compositionengine/Layer.h>
#include <compositionengine/OutputLayer.h>
@@ -435,6 +438,7 @@
}
void BufferQueueLayer::onFrameAvailable(const BufferItem& item) {
+ ATRACE_CALL();
// Add this buffer from our internal queue tracker
{ // Autolock scope
if (mFlinger->mUseSmart90ForVideo) {
@@ -475,9 +479,11 @@
} else {
mFlinger->signalLayerUpdate();
}
+ mConsumer->onBufferAvailable(item);
}
void BufferQueueLayer::onFrameReplaced(const BufferItem& item) {
+ ATRACE_CALL();
{ // Autolock scope
Mutex::Autolock lock(mQueueItemLock);
@@ -499,6 +505,7 @@
mLastFrameNumberReceived = item.mFrameNumber;
mQueueItemCondition.broadcast();
}
+ mConsumer->onBufferAvailable(item);
}
void BufferQueueLayer::onSidebandStreamChanged() {
diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp
index d3fe7b6..1e5c25f 100644
--- a/services/surfaceflinger/RefreshRateOverlay.cpp
+++ b/services/surfaceflinger/RefreshRateOverlay.cpp
@@ -39,7 +39,6 @@
mLayer = mClient->getLayerUser(mIBinder);
mLayer->setCrop_legacy(Rect(50, 70, 200, 100), true);
- mLayer->setCornerRadius(15.0f);
mLayer->setLayer(INT32_MAX - 2);
return true;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index b2abe18..f8745f7 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1632,7 +1632,7 @@
}
// For now, only propagate backpressure when missing a hwc frame.
- if (hwcFrameMissed) {
+ if (hwcFrameMissed && !gpuFrameMissed) {
if (mPropagateBackpressure) {
signalLayerUpdate();
break;