Loading core/proto/android/service/graphicsstats.proto +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,9 @@ message GraphicsStatsProto { // HWUI renders pipeline type: GL or Vulkan optional PipelineType pipeline = 8; // The UID of the app optional int32 uid = 9; } message GraphicsStatsJankSummaryProto { Loading graphics/java/android/graphics/GraphicsStatsService.java +9 −7 Original line number Diff line number Diff line Loading @@ -311,7 +311,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { Log.w(TAG, "Unable to create path: '" + parent.getAbsolutePath() + "'"); return; } nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.mPackageName, nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.mUid, buffer.mInfo.mPackageName, buffer.mInfo.mVersionCode, buffer.mInfo.mStartTime, buffer.mInfo.mEndTime, buffer.mData); } Loading Loading @@ -405,7 +405,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { HistoricalBuffer buffer = buffers.get(i); File path = pathForApp(buffer.mInfo); skipFiles.add(path); nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.mPackageName, nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.mUid, buffer.mInfo.mPackageName, buffer.mInfo.mVersionCode, buffer.mInfo.mStartTime, buffer.mInfo.mEndTime, buffer.mData); } Loading Loading @@ -469,21 +469,23 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { private static native int nGetAshmemSize(); private static native long nCreateDump(int outFd, boolean isProto); private static native void nAddToDump(long dump, String path, String packageName, private static native void nAddToDump(long dump, String path, int uid, String packageName, long versionCode, long startTime, long endTime, byte[] data); private static native void nAddToDump(long dump, String path); private static native void nFinishDump(long dump); private static native void nFinishDumpInMemory(long dump, long pulledData, boolean lastFullDay); private static native void nSaveBuffer(String path, String packageName, long versionCode, long startTime, long endTime, byte[] data); private static native void nSaveBuffer(String path, int uid, String packageName, long versionCode, long startTime, long endTime, byte[] data); private final class BufferInfo { final int mUid; final String mPackageName; final long mVersionCode; long mStartTime; long mEndTime; BufferInfo(String packageName, long versionCode, long startTime) { BufferInfo(int uid, String packageName, long versionCode, long startTime) { this.mUid = uid; this.mPackageName = packageName; this.mVersionCode = versionCode; this.mStartTime = startTime; Loading @@ -502,7 +504,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { ActiveBuffer(IGraphicsStatsCallback token, int uid, int pid, String packageName, long versionCode) throws RemoteException, IOException { mInfo = new BufferInfo(packageName, versionCode, System.currentTimeMillis()); mInfo = new BufferInfo(uid, packageName, versionCode, System.currentTimeMillis()); mUid = uid; mPid = pid; mCallback = token; Loading libs/hwui/jni/GraphicsStatsService.cpp +18 −15 Original line number Diff line number Diff line Loading @@ -42,8 +42,9 @@ static jlong createDump(JNIEnv*, jobject, jint fd, jboolean isProto) { return reinterpret_cast<jlong>(dump); } static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jint uid, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { std::string path; const ProfileData* data = nullptr; LOG_ALWAYS_FATAL_IF(jdata == nullptr && jpath == nullptr, "Path and data can't both be null"); Loading @@ -68,7 +69,8 @@ static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstrin LOG_ALWAYS_FATAL_IF(!dump, "null passed for dump pointer"); const std::string package(packageChars.c_str(), packageChars.size()); GraphicsStatsService::addToDump(dump, path, package, versionCode, startTime, endTime, data); GraphicsStatsService::addToDump(dump, path, static_cast<uid_t>(uid), package, versionCode, startTime, endTime, data); } static void addFileToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath) { Loading @@ -91,7 +93,7 @@ static void finishDumpInMemory(JNIEnv* env, jobject, jlong dumpPtr, jlong pulled GraphicsStatsService::finishDumpInMemory(dump, data, lastFullDay == JNI_TRUE); } static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpackage, static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jint uid, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { ScopedByteArrayRO buffer(env, jdata); LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData), Loading @@ -106,7 +108,8 @@ static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpacka const std::string path(pathChars.c_str(), pathChars.size()); const std::string package(packageChars.c_str(), packageChars.size()); const ProfileData* data = reinterpret_cast<const ProfileData*>(buffer.get()); GraphicsStatsService::saveBuffer(path, package, versionCode, startTime, endTime, data); GraphicsStatsService::saveBuffer(path, static_cast<uid_t>(uid), package, versionCode, startTime, endTime, data); } static jobject gGraphicsStatsServiceObject = nullptr; Loading Loading @@ -173,14 +176,14 @@ static void nativeDestructor(JNIEnv* env, jobject javaObject) { } // namespace android using namespace android; static const JNINativeMethod sMethods[] = {{"nGetAshmemSize", "()I", (void*)getAshmemSize}, static const JNINativeMethod sMethods[] = { {"nGetAshmemSize", "()I", (void*)getAshmemSize}, {"nCreateDump", "(IZ)J", (void*)createDump}, {"nAddToDump", "(JLjava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)addToDump}, {"nAddToDump", "(JLjava/lang/String;ILjava/lang/String;JJJ[B)V", (void*)addToDump}, {"nAddToDump", "(JLjava/lang/String;)V", (void*)addFileToDump}, {"nFinishDump", "(J)V", (void*)finishDump}, {"nFinishDumpInMemory", "(JJZ)V", (void*)finishDumpInMemory}, {"nSaveBuffer", "(Ljava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)saveBuffer}, {"nSaveBuffer", "(Ljava/lang/String;ILjava/lang/String;JJJ[B)V", (void*)saveBuffer}, {"nativeInit", "()V", (void*)nativeInit}, {"nativeDestructor", "()V", (void*)nativeDestructor}}; Loading libs/hwui/protos/graphicsstats.proto +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,9 @@ message GraphicsStatsProto { // HWUI renders pipeline type: GL or Vulkan optional PipelineType pipeline = 8; // The UID of the app optional int32 uid = 9; } message GraphicsStatsJankSummaryProto { Loading libs/hwui/service/GraphicsStatsService.cpp +22 −15 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <google/protobuf/io/zero_copy_stream_impl_lite.h> #include <inttypes.h> #include <log/log.h> #include <stats_annotations.h> #include <stats_event.h> #include <statslog_hwui.h> #include <sys/mman.h> Loading @@ -45,9 +46,9 @@ static_assert(sizeof(sCurrentFileVersion) == sHeaderSize, "Header size is wrong" constexpr int sHistogramSize = ProfileData::HistogramSize(); constexpr int sGPUHistogramSize = ProfileData::GPUHistogramSize(); static bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data); static bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data); static void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int outFd); class FileDescriptor { Loading Loading @@ -159,15 +160,16 @@ bool GraphicsStatsService::parseFromFile(const std::string& path, return success; } bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { if (proto->stats_start() == 0 || proto->stats_start() > startTime) { proto->set_stats_start(startTime); } if (proto->stats_end() == 0 || proto->stats_end() < endTime) { proto->set_stats_end(endTime); } proto->set_uid(static_cast<int32_t>(uid)); proto->set_package_name(package); proto->set_version_code(versionCode); proto->set_pipeline(data->pipelineType() == RenderPipelineType::SkiaGL ? Loading Loading @@ -286,6 +288,7 @@ void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int fd) { proto->package_name().c_str(), proto->has_summary()); return; } dprintf(fd, "\nUID: %d", proto->uid()); dprintf(fd, "\nPackage: %s", proto->package_name().c_str()); dprintf(fd, "\nVersion: %" PRId64, proto->version_code()); dprintf(fd, "\nStats since: %" PRId64 "ns", proto->stats_start()); Loading Loading @@ -319,14 +322,15 @@ void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int fd) { dprintf(fd, "\n"); } void GraphicsStatsService::saveBuffer(const std::string& path, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { void GraphicsStatsService::saveBuffer(const std::string& path, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { protos::GraphicsStatsProto statsProto; if (!parseFromFile(path, &statsProto)) { statsProto.Clear(); } if (!mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data)) { if (!mergeProfileDataIntoProto(&statsProto, uid, package, versionCode, startTime, endTime, data)) { return; } // Although we might not have read any data from the file, merging the existing data Loading Loading @@ -383,7 +387,7 @@ public: private: // use package name and app version for a key typedef std::pair<std::string, int64_t> DumpKey; typedef std::tuple<uid_t, std::string, int64_t> DumpKey; std::map<DumpKey, protos::GraphicsStatsProto> mStats; int mFd; Loading @@ -392,7 +396,8 @@ private: }; void GraphicsStatsService::Dump::mergeStat(const protos::GraphicsStatsProto& stat) { auto dumpKey = std::make_pair(stat.package_name(), stat.version_code()); auto dumpKey = std::make_tuple(static_cast<uid_t>(stat.uid()), stat.package_name(), stat.version_code()); auto findIt = mStats.find(dumpKey); if (findIt == mStats.end()) { mStats[dumpKey] = stat; Loading Loading @@ -437,15 +442,15 @@ GraphicsStatsService::Dump* GraphicsStatsService::createDump(int outFd, DumpType return new Dump(outFd, type); } void GraphicsStatsService::addToDump(Dump* dump, const std::string& path, void GraphicsStatsService::addToDump(Dump* dump, const std::string& path, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { protos::GraphicsStatsProto statsProto; if (!path.empty() && !parseFromFile(path, &statsProto)) { statsProto.Clear(); } if (data && !mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data)) { if (data && !mergeProfileDataIntoProto(&statsProto, uid, package, versionCode, startTime, endTime, data)) { return; } if (!statsProto.IsInitialized()) { Loading Loading @@ -556,6 +561,8 @@ void GraphicsStatsService::finishDumpInMemory(Dump* dump, AStatsEventList* data, // TODO: fill in UI mainline module version, when the feature is available. AStatsEvent_writeInt64(event, (int64_t)0); AStatsEvent_writeBool(event, !lastFullDay); AStatsEvent_writeInt32(event, stat.uid()); AStatsEvent_addBoolAnnotation(event, ASTATSLOG_ANNOTATION_ID_IS_UID, true); AStatsEvent_build(event); } delete dump; Loading Loading
core/proto/android/service/graphicsstats.proto +3 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,9 @@ message GraphicsStatsProto { // HWUI renders pipeline type: GL or Vulkan optional PipelineType pipeline = 8; // The UID of the app optional int32 uid = 9; } message GraphicsStatsJankSummaryProto { Loading
graphics/java/android/graphics/GraphicsStatsService.java +9 −7 Original line number Diff line number Diff line Loading @@ -311,7 +311,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { Log.w(TAG, "Unable to create path: '" + parent.getAbsolutePath() + "'"); return; } nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.mPackageName, nSaveBuffer(path.getAbsolutePath(), buffer.mInfo.mUid, buffer.mInfo.mPackageName, buffer.mInfo.mVersionCode, buffer.mInfo.mStartTime, buffer.mInfo.mEndTime, buffer.mData); } Loading Loading @@ -405,7 +405,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { HistoricalBuffer buffer = buffers.get(i); File path = pathForApp(buffer.mInfo); skipFiles.add(path); nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.mPackageName, nAddToDump(dump, path.getAbsolutePath(), buffer.mInfo.mUid, buffer.mInfo.mPackageName, buffer.mInfo.mVersionCode, buffer.mInfo.mStartTime, buffer.mInfo.mEndTime, buffer.mData); } Loading Loading @@ -469,21 +469,23 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { private static native int nGetAshmemSize(); private static native long nCreateDump(int outFd, boolean isProto); private static native void nAddToDump(long dump, String path, String packageName, private static native void nAddToDump(long dump, String path, int uid, String packageName, long versionCode, long startTime, long endTime, byte[] data); private static native void nAddToDump(long dump, String path); private static native void nFinishDump(long dump); private static native void nFinishDumpInMemory(long dump, long pulledData, boolean lastFullDay); private static native void nSaveBuffer(String path, String packageName, long versionCode, long startTime, long endTime, byte[] data); private static native void nSaveBuffer(String path, int uid, String packageName, long versionCode, long startTime, long endTime, byte[] data); private final class BufferInfo { final int mUid; final String mPackageName; final long mVersionCode; long mStartTime; long mEndTime; BufferInfo(String packageName, long versionCode, long startTime) { BufferInfo(int uid, String packageName, long versionCode, long startTime) { this.mUid = uid; this.mPackageName = packageName; this.mVersionCode = versionCode; this.mStartTime = startTime; Loading @@ -502,7 +504,7 @@ public class GraphicsStatsService extends IGraphicsStats.Stub { ActiveBuffer(IGraphicsStatsCallback token, int uid, int pid, String packageName, long versionCode) throws RemoteException, IOException { mInfo = new BufferInfo(packageName, versionCode, System.currentTimeMillis()); mInfo = new BufferInfo(uid, packageName, versionCode, System.currentTimeMillis()); mUid = uid; mPid = pid; mCallback = token; Loading
libs/hwui/jni/GraphicsStatsService.cpp +18 −15 Original line number Diff line number Diff line Loading @@ -42,8 +42,9 @@ static jlong createDump(JNIEnv*, jobject, jint fd, jboolean isProto) { return reinterpret_cast<jlong>(dump); } static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jint uid, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { std::string path; const ProfileData* data = nullptr; LOG_ALWAYS_FATAL_IF(jdata == nullptr && jpath == nullptr, "Path and data can't both be null"); Loading @@ -68,7 +69,8 @@ static void addToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath, jstrin LOG_ALWAYS_FATAL_IF(!dump, "null passed for dump pointer"); const std::string package(packageChars.c_str(), packageChars.size()); GraphicsStatsService::addToDump(dump, path, package, versionCode, startTime, endTime, data); GraphicsStatsService::addToDump(dump, path, static_cast<uid_t>(uid), package, versionCode, startTime, endTime, data); } static void addFileToDump(JNIEnv* env, jobject, jlong dumpPtr, jstring jpath) { Loading @@ -91,7 +93,7 @@ static void finishDumpInMemory(JNIEnv* env, jobject, jlong dumpPtr, jlong pulled GraphicsStatsService::finishDumpInMemory(dump, data, lastFullDay == JNI_TRUE); } static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpackage, static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jint uid, jstring jpackage, jlong versionCode, jlong startTime, jlong endTime, jbyteArray jdata) { ScopedByteArrayRO buffer(env, jdata); LOG_ALWAYS_FATAL_IF(buffer.size() != sizeof(ProfileData), Loading @@ -106,7 +108,8 @@ static void saveBuffer(JNIEnv* env, jobject clazz, jstring jpath, jstring jpacka const std::string path(pathChars.c_str(), pathChars.size()); const std::string package(packageChars.c_str(), packageChars.size()); const ProfileData* data = reinterpret_cast<const ProfileData*>(buffer.get()); GraphicsStatsService::saveBuffer(path, package, versionCode, startTime, endTime, data); GraphicsStatsService::saveBuffer(path, static_cast<uid_t>(uid), package, versionCode, startTime, endTime, data); } static jobject gGraphicsStatsServiceObject = nullptr; Loading Loading @@ -173,14 +176,14 @@ static void nativeDestructor(JNIEnv* env, jobject javaObject) { } // namespace android using namespace android; static const JNINativeMethod sMethods[] = {{"nGetAshmemSize", "()I", (void*)getAshmemSize}, static const JNINativeMethod sMethods[] = { {"nGetAshmemSize", "()I", (void*)getAshmemSize}, {"nCreateDump", "(IZ)J", (void*)createDump}, {"nAddToDump", "(JLjava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)addToDump}, {"nAddToDump", "(JLjava/lang/String;ILjava/lang/String;JJJ[B)V", (void*)addToDump}, {"nAddToDump", "(JLjava/lang/String;)V", (void*)addFileToDump}, {"nFinishDump", "(J)V", (void*)finishDump}, {"nFinishDumpInMemory", "(JJZ)V", (void*)finishDumpInMemory}, {"nSaveBuffer", "(Ljava/lang/String;Ljava/lang/String;JJJ[B)V", (void*)saveBuffer}, {"nSaveBuffer", "(Ljava/lang/String;ILjava/lang/String;JJJ[B)V", (void*)saveBuffer}, {"nativeInit", "()V", (void*)nativeInit}, {"nativeDestructor", "()V", (void*)nativeDestructor}}; Loading
libs/hwui/protos/graphicsstats.proto +3 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,9 @@ message GraphicsStatsProto { // HWUI renders pipeline type: GL or Vulkan optional PipelineType pipeline = 8; // The UID of the app optional int32 uid = 9; } message GraphicsStatsJankSummaryProto { Loading
libs/hwui/service/GraphicsStatsService.cpp +22 −15 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <google/protobuf/io/zero_copy_stream_impl_lite.h> #include <inttypes.h> #include <log/log.h> #include <stats_annotations.h> #include <stats_event.h> #include <statslog_hwui.h> #include <sys/mman.h> Loading @@ -45,9 +46,9 @@ static_assert(sizeof(sCurrentFileVersion) == sHeaderSize, "Header size is wrong" constexpr int sHistogramSize = ProfileData::HistogramSize(); constexpr int sGPUHistogramSize = ProfileData::GPUHistogramSize(); static bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data); static bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data); static void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int outFd); class FileDescriptor { Loading Loading @@ -159,15 +160,16 @@ bool GraphicsStatsService::parseFromFile(const std::string& path, return success; } bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { bool mergeProfileDataIntoProto(protos::GraphicsStatsProto* proto, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { if (proto->stats_start() == 0 || proto->stats_start() > startTime) { proto->set_stats_start(startTime); } if (proto->stats_end() == 0 || proto->stats_end() < endTime) { proto->set_stats_end(endTime); } proto->set_uid(static_cast<int32_t>(uid)); proto->set_package_name(package); proto->set_version_code(versionCode); proto->set_pipeline(data->pipelineType() == RenderPipelineType::SkiaGL ? Loading Loading @@ -286,6 +288,7 @@ void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int fd) { proto->package_name().c_str(), proto->has_summary()); return; } dprintf(fd, "\nUID: %d", proto->uid()); dprintf(fd, "\nPackage: %s", proto->package_name().c_str()); dprintf(fd, "\nVersion: %" PRId64, proto->version_code()); dprintf(fd, "\nStats since: %" PRId64 "ns", proto->stats_start()); Loading Loading @@ -319,14 +322,15 @@ void dumpAsTextToFd(protos::GraphicsStatsProto* proto, int fd) { dprintf(fd, "\n"); } void GraphicsStatsService::saveBuffer(const std::string& path, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { void GraphicsStatsService::saveBuffer(const std::string& path, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { protos::GraphicsStatsProto statsProto; if (!parseFromFile(path, &statsProto)) { statsProto.Clear(); } if (!mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data)) { if (!mergeProfileDataIntoProto(&statsProto, uid, package, versionCode, startTime, endTime, data)) { return; } // Although we might not have read any data from the file, merging the existing data Loading Loading @@ -383,7 +387,7 @@ public: private: // use package name and app version for a key typedef std::pair<std::string, int64_t> DumpKey; typedef std::tuple<uid_t, std::string, int64_t> DumpKey; std::map<DumpKey, protos::GraphicsStatsProto> mStats; int mFd; Loading @@ -392,7 +396,8 @@ private: }; void GraphicsStatsService::Dump::mergeStat(const protos::GraphicsStatsProto& stat) { auto dumpKey = std::make_pair(stat.package_name(), stat.version_code()); auto dumpKey = std::make_tuple(static_cast<uid_t>(stat.uid()), stat.package_name(), stat.version_code()); auto findIt = mStats.find(dumpKey); if (findIt == mStats.end()) { mStats[dumpKey] = stat; Loading Loading @@ -437,15 +442,15 @@ GraphicsStatsService::Dump* GraphicsStatsService::createDump(int outFd, DumpType return new Dump(outFd, type); } void GraphicsStatsService::addToDump(Dump* dump, const std::string& path, void GraphicsStatsService::addToDump(Dump* dump, const std::string& path, uid_t uid, const std::string& package, int64_t versionCode, int64_t startTime, int64_t endTime, const ProfileData* data) { protos::GraphicsStatsProto statsProto; if (!path.empty() && !parseFromFile(path, &statsProto)) { statsProto.Clear(); } if (data && !mergeProfileDataIntoProto(&statsProto, package, versionCode, startTime, endTime, data)) { if (data && !mergeProfileDataIntoProto(&statsProto, uid, package, versionCode, startTime, endTime, data)) { return; } if (!statsProto.IsInitialized()) { Loading Loading @@ -556,6 +561,8 @@ void GraphicsStatsService::finishDumpInMemory(Dump* dump, AStatsEventList* data, // TODO: fill in UI mainline module version, when the feature is available. AStatsEvent_writeInt64(event, (int64_t)0); AStatsEvent_writeBool(event, !lastFullDay); AStatsEvent_writeInt32(event, stat.uid()); AStatsEvent_addBoolAnnotation(event, ASTATSLOG_ANNOTATION_ID_IS_UID, true); AStatsEvent_build(event); } delete dump; Loading