Loading services/gpuservice/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ cc_defaults { "frameworks/native/vulkan/include", ], shared_libs: [ "libbase", "libbinder", "libcutils", "libgraphicsenv", Loading @@ -37,6 +38,7 @@ cc_defaults { "libvulkan", ], static_libs: [ "libserviceutils", "libvkjson", ], } Loading services/gpuservice/GpuService.cpp +35 −14 Original line number Diff line number Diff line Loading @@ -18,8 +18,12 @@ #include "GpuService.h" #include <android-base/stringprintf.h> #include <binder/IPCThreadState.h> #include <binder/IResultReceiver.h> #include <binder/Parcel.h> #include <binder/PermissionCache.h> #include <private/android_filesystem_config.h> #include <utils/String8.h> #include <utils/Trace.h> Loading @@ -27,11 +31,14 @@ namespace android { using base::StringAppendF; namespace { status_t cmd_help(int out); status_t cmd_vkjson(int out, int err); } status_t cmdHelp(int out); status_t cmdVkjson(int out, int err); } // namespace const String16 sDump("android.permission.DUMP"); const char* const GpuService::SERVICE_NAME = "gpu"; Loading Loading @@ -66,23 +73,37 @@ status_t GpuService::shellCommand(int /*in*/, int out, int err, std::vector<Stri ALOGV(" arg[%zu]: '%s'", i, String8(args[i]).string()); if (args.size() >= 1) { if (args[0] == String16("vkjson")) return cmd_vkjson(out, err); if (args[0] == String16("help")) return cmd_help(out); if (args[0] == String16("vkjson")) return cmdVkjson(out, err); if (args[0] == String16("help")) return cmdHelp(out); } // no command, or unrecognized command cmd_help(err); cmdHelp(err); return BAD_VALUE; } status_t GpuService::doDump(int fd, const Vector<String16>& /*args*/, bool /*asProto*/) { std::string result; IPCThreadState* ipc = IPCThreadState::self(); const int pid = ipc->getCallingPid(); const int uid = ipc->getCallingUid(); if ((uid != AID_SHELL) && !PermissionCache::checkPermission(sDump, pid, uid)) { StringAppendF(&result, "Permission Denial: can't dump gpu from pid=%d, uid=%d\n", pid, uid); } else { result.append("Hello world from dumpsys gpu.\n"); } write(fd, result.c_str(), result.size()); return NO_ERROR; } namespace { status_t cmd_help(int out) { status_t cmdHelp(int out) { FILE* outs = fdopen(out, "w"); if (!outs) { ALOGE("vkjson: failed to create out stream: %s (%d)", strerror(errno), errno); ALOGE("vkjson: failed to create out stream: %s (%d)", strerror(errno), errno); return BAD_VALUE; } fprintf(outs, Loading @@ -98,7 +119,7 @@ void vkjsonPrint(FILE* out) { fputc('\n', out); } status_t cmd_vkjson(int out, int /*err*/) { status_t cmdVkjson(int out, int /*err*/) { FILE* outs = fdopen(out, "w"); if (!outs) { int errnum = errno; Loading services/gpuservice/GpuService.h +27 −2 Original line number Diff line number Diff line Loading @@ -20,13 +20,14 @@ #include <binder/IInterface.h> #include <cutils/compiler.h> #include <graphicsenv/IGpuService.h> #include <serviceutils/PriorityDumper.h> #include <mutex> #include <vector> namespace android { class GpuService : public BnGpuService { class GpuService : public BnGpuService, public PriorityDumper { public: static const char* const SERVICE_NAME ANDROID_API; Loading @@ -36,12 +37,36 @@ protected: status_t shellCommand(int in, int out, int err, std::vector<String16>& args) override; private: // IGpuService interface /* * IGpuService interface */ 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); /* * IBinder interface */ status_t dump(int fd, const Vector<String16>& args) override { return priorityDump(fd, args); } /* * Debugging & dumpsys */ status_t dumpCritical(int fd, const Vector<String16>& /*args*/, bool asProto) override { return doDump(fd, Vector<String16>(), asProto); } status_t dumpAll(int fd, const Vector<String16>& args, bool asProto) override { return doDump(fd, args, asProto); } status_t doDump(int fd, const Vector<String16>& args, bool asProto); /* * Attributes */ // GpuStats access must be protected by mStateLock std::mutex mStateLock; }; Loading Loading
services/gpuservice/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ cc_defaults { "frameworks/native/vulkan/include", ], shared_libs: [ "libbase", "libbinder", "libcutils", "libgraphicsenv", Loading @@ -37,6 +38,7 @@ cc_defaults { "libvulkan", ], static_libs: [ "libserviceutils", "libvkjson", ], } Loading
services/gpuservice/GpuService.cpp +35 −14 Original line number Diff line number Diff line Loading @@ -18,8 +18,12 @@ #include "GpuService.h" #include <android-base/stringprintf.h> #include <binder/IPCThreadState.h> #include <binder/IResultReceiver.h> #include <binder/Parcel.h> #include <binder/PermissionCache.h> #include <private/android_filesystem_config.h> #include <utils/String8.h> #include <utils/Trace.h> Loading @@ -27,11 +31,14 @@ namespace android { using base::StringAppendF; namespace { status_t cmd_help(int out); status_t cmd_vkjson(int out, int err); } status_t cmdHelp(int out); status_t cmdVkjson(int out, int err); } // namespace const String16 sDump("android.permission.DUMP"); const char* const GpuService::SERVICE_NAME = "gpu"; Loading Loading @@ -66,23 +73,37 @@ status_t GpuService::shellCommand(int /*in*/, int out, int err, std::vector<Stri ALOGV(" arg[%zu]: '%s'", i, String8(args[i]).string()); if (args.size() >= 1) { if (args[0] == String16("vkjson")) return cmd_vkjson(out, err); if (args[0] == String16("help")) return cmd_help(out); if (args[0] == String16("vkjson")) return cmdVkjson(out, err); if (args[0] == String16("help")) return cmdHelp(out); } // no command, or unrecognized command cmd_help(err); cmdHelp(err); return BAD_VALUE; } status_t GpuService::doDump(int fd, const Vector<String16>& /*args*/, bool /*asProto*/) { std::string result; IPCThreadState* ipc = IPCThreadState::self(); const int pid = ipc->getCallingPid(); const int uid = ipc->getCallingUid(); if ((uid != AID_SHELL) && !PermissionCache::checkPermission(sDump, pid, uid)) { StringAppendF(&result, "Permission Denial: can't dump gpu from pid=%d, uid=%d\n", pid, uid); } else { result.append("Hello world from dumpsys gpu.\n"); } write(fd, result.c_str(), result.size()); return NO_ERROR; } namespace { status_t cmd_help(int out) { status_t cmdHelp(int out) { FILE* outs = fdopen(out, "w"); if (!outs) { ALOGE("vkjson: failed to create out stream: %s (%d)", strerror(errno), errno); ALOGE("vkjson: failed to create out stream: %s (%d)", strerror(errno), errno); return BAD_VALUE; } fprintf(outs, Loading @@ -98,7 +119,7 @@ void vkjsonPrint(FILE* out) { fputc('\n', out); } status_t cmd_vkjson(int out, int /*err*/) { status_t cmdVkjson(int out, int /*err*/) { FILE* outs = fdopen(out, "w"); if (!outs) { int errnum = errno; Loading
services/gpuservice/GpuService.h +27 −2 Original line number Diff line number Diff line Loading @@ -20,13 +20,14 @@ #include <binder/IInterface.h> #include <cutils/compiler.h> #include <graphicsenv/IGpuService.h> #include <serviceutils/PriorityDumper.h> #include <mutex> #include <vector> namespace android { class GpuService : public BnGpuService { class GpuService : public BnGpuService, public PriorityDumper { public: static const char* const SERVICE_NAME ANDROID_API; Loading @@ -36,12 +37,36 @@ protected: status_t shellCommand(int in, int out, int err, std::vector<String16>& args) override; private: // IGpuService interface /* * IGpuService interface */ 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); /* * IBinder interface */ status_t dump(int fd, const Vector<String16>& args) override { return priorityDump(fd, args); } /* * Debugging & dumpsys */ status_t dumpCritical(int fd, const Vector<String16>& /*args*/, bool asProto) override { return doDump(fd, Vector<String16>(), asProto); } status_t dumpAll(int fd, const Vector<String16>& args, bool asProto) override { return doDump(fd, args, asProto); } status_t doDump(int fd, const Vector<String16>& args, bool asProto); /* * Attributes */ // GpuStats access must be protected by mStateLock std::mutex mStateLock; }; Loading