Loading services/mediametrics/Android.bp +89 −14 Original line number Diff line number Diff line // Media Statistics service // tidy_errors = [ // https://clang.llvm.org/extra/clang-tidy/checks/list.html // For many categories, the checks are too many to specify individually. // Feel free to disable as needed - as warnings are generally ignored, // we treat warnings as errors. "android-*", "bugprone-*", "cert-*", "clang-analyzer-security*", "google-*", "misc-*", //"modernize-*", // explicitly list the modernize as they can be subjective. "modernize-avoid-bind", //"modernize-avoid-c-arrays", // std::array<> can be verbose "modernize-concat-nested-namespaces", //"modernize-deprecated-headers", // C headers still ok even if there is C++ equivalent. "modernize-deprecated-ios-base-aliases", "modernize-loop-convert", "modernize-make-shared", "modernize-make-unique", "modernize-pass-by-value", "modernize-raw-string-literal", "modernize-redundant-void-arg", "modernize-replace-auto-ptr", "modernize-replace-random-shuffle", "modernize-return-braced-init-list", "modernize-shrink-to-fit", "modernize-unary-static-assert", "modernize-use-auto", // debatable - auto can obscure type "modernize-use-bool-literals", "modernize-use-default-member-init", "modernize-use-emplace", "modernize-use-equals-default", "modernize-use-equals-delete", "modernize-use-nodiscard", "modernize-use-noexcept", "modernize-use-nullptr", "modernize-use-override", //"modernize-use-trailing-return-type", // not necessarily more readable "modernize-use-transparent-functors", "modernize-use-uncaught-exceptions", "modernize-use-using", "performance-*", // Remove some pedantic stylistic requirements. "-google-readability-casting", // C++ casts not always necessary and may be verbose "-google-readability-todo", // do not require TODO(info) ] cc_defaults { name: "mediametrics_flags_defaults", // https://clang.llvm.org/docs/UsersManual.html#command-line-options // https://clang.llvm.org/docs/DiagnosticsReference.html cflags: [ "-Wall", "-Wdeprecated", "-Werror", "-Werror=implicit-fallthrough", "-Werror=sometimes-uninitialized", "-Werror=conditional-uninitialized", "-Wextra", "-Wredundant-decls", "-Wshadow", "-Wstrict-aliasing", "-fstrict-aliasing", "-Wthread-safety", //"-Wthread-safety-negative", // experimental - looks broken in R. "-Wunreachable-code", "-Wunreachable-code-break", "-Wunreachable-code-return", "-Wunused", "-Wused-but-marked-unused", ], // https://clang.llvm.org/extra/clang-tidy/ tidy: true, tidy_checks: tidy_errors, tidy_checks_as_errors: tidy_errors, tidy_flags: [ "-format-style='file'", "--header-filter='frameworks/av/services/mediametrics/'", ], } cc_binary { name: "mediametrics", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "main_mediametrics.cpp", Loading @@ -22,17 +108,13 @@ cc_binary { init_rc: [ "mediametrics.rc", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } cc_library_shared { name: "libmediametricsservice", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "AudioAnalytics.cpp", Loading Loading @@ -73,11 +155,4 @@ cc_library_shared { include_dirs: [ "system/media/audio_utils/include", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } services/mediametrics/AudioAnalytics.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -594,4 +594,4 @@ void AudioAnalytics::DeviceConnection::expire() { #endif } } // namespace android } // namespace android::mediametrics services/mediametrics/AudioPowerUsage.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -160,7 +160,7 @@ bool AudioPowerUsage::saveAsItem_l( return true; //ignore unknown device } for (auto item : mItems) { for (const auto& item : mItems) { int32_t item_type = 0, item_device = 0; double item_volume = 0.; int64_t item_duration_ns = 0; Loading Loading @@ -259,8 +259,8 @@ void AudioPowerUsage::checkMode(const std::shared_ptr<const mediametrics::Item>& const int64_t endCallNs = item->getTimestamp(); const int64_t durationNs = endCallNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endCallNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endCallNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } } else if (mode == "AUDIO_MODE_IN_CALL") { // entering call mode Loading @@ -287,8 +287,8 @@ void AudioPowerUsage::checkVoiceVolume(const std::shared_ptr<const mediametrics: const int64_t timeNs = item->getTimestamp(); const int64_t durationNs = timeNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (timeNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(timeNs - mVolumeTimeNs)) / durationNs; mVolumeTimeNs = timeNs; } } Loading Loading @@ -318,8 +318,8 @@ void AudioPowerUsage::checkCreatePatch(const std::shared_ptr<const mediametrics: const int64_t endDeviceNs = item->getTimestamp(); const int64_t durationNs = endDeviceNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endDeviceNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endDeviceNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } // reset statistics Loading Loading @@ -391,4 +391,4 @@ std::pair<std::string, int32_t> AudioPowerUsage::dump(int limit) const { return { ss.str(), slot }; } } // namespace android } // namespace android::mediametrics services/mediametrics/MediaMetricsService.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ namespace android { using namespace mediametrics; using mediametrics::Item; using mediametrics::startsWith; // individual records kept in memory: age or count // age: <= 28 hours (1 1/6 days) Loading Loading @@ -63,7 +64,7 @@ nsecs_t MediaMetricsService::roundTime(nsecs_t timeNs) bool MediaMetricsService::useUidForPackage( const std::string& package, const std::string& installer) { if (strchr(package.c_str(), '.') == NULL) { if (strchr(package.c_str(), '.') == nullptr) { return false; // not of form 'com.whatever...'; assume internal and ok } else if (strncmp(package.c_str(), "android.", 8) == 0) { return false; // android.* packages are assumed fine Loading Loading @@ -203,9 +204,9 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele // Overwrite package name and version if the caller was untrusted or empty if (!isTrusted || item->getPkgName().empty()) { const uid_t uid = item->getUid(); const uid_t uidItem = item->getUid(); const auto [ pkgName, version ] = MediaMetricsService::getSanitizedPackageNameAndVersionCode(uid); MediaMetricsService::getSanitizedPackageNameAndVersionCode(uidItem); item->setPkgName(pkgName); item->setPkgVersionCode(version); } Loading Loading @@ -320,7 +321,7 @@ status_t MediaMetricsService::dump(int fd, const Vector<String16>& args) String8 value(args[i]); char *endp; const char *p = value.string(); long long sec = strtoll(p, &endp, 10); const auto sec = (int64_t)strtoll(p, &endp, 10); if (endp == p || *endp != '\0' || sec == 0) { sinceNs = 0; } else if (sec < 0) { Loading services/mediametrics/TimeMachine.h +5 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <any> #include <map> #include <mutex> #include <sstream> #include <string> #include <variant> Loading Loading @@ -81,6 +82,8 @@ private: , mCreationTime(time) , mLastModificationTime(time) { (void)mCreationTime; // suppress unused warning. // allowUid allows an untrusted client with a matching uid to set properties // in this key. // If allowUid == (uid_t)-1, no untrusted client may set properties in the key. Loading Loading @@ -209,7 +212,7 @@ private: const std::string mKey; const uid_t mAllowUid; const int64_t mCreationTime __unused; const int64_t mCreationTime; int64_t mLastModificationTime; std::map<std::string /* property */, PropertyHistory> mPropertyMap; Loading Loading @@ -442,7 +445,7 @@ public: ++it) { if (ll <= 0) break; if (prefix != nullptr && !startsWith(it->first, prefix)) break; std::lock_guard lock(getLockForKey(it->first)); std::lock_guard lock2(getLockForKey(it->first)); auto [s, l] = it->second->dump(ll, sinceNs); ss << s; ll -= l; Loading Loading
services/mediametrics/Android.bp +89 −14 Original line number Diff line number Diff line // Media Statistics service // tidy_errors = [ // https://clang.llvm.org/extra/clang-tidy/checks/list.html // For many categories, the checks are too many to specify individually. // Feel free to disable as needed - as warnings are generally ignored, // we treat warnings as errors. "android-*", "bugprone-*", "cert-*", "clang-analyzer-security*", "google-*", "misc-*", //"modernize-*", // explicitly list the modernize as they can be subjective. "modernize-avoid-bind", //"modernize-avoid-c-arrays", // std::array<> can be verbose "modernize-concat-nested-namespaces", //"modernize-deprecated-headers", // C headers still ok even if there is C++ equivalent. "modernize-deprecated-ios-base-aliases", "modernize-loop-convert", "modernize-make-shared", "modernize-make-unique", "modernize-pass-by-value", "modernize-raw-string-literal", "modernize-redundant-void-arg", "modernize-replace-auto-ptr", "modernize-replace-random-shuffle", "modernize-return-braced-init-list", "modernize-shrink-to-fit", "modernize-unary-static-assert", "modernize-use-auto", // debatable - auto can obscure type "modernize-use-bool-literals", "modernize-use-default-member-init", "modernize-use-emplace", "modernize-use-equals-default", "modernize-use-equals-delete", "modernize-use-nodiscard", "modernize-use-noexcept", "modernize-use-nullptr", "modernize-use-override", //"modernize-use-trailing-return-type", // not necessarily more readable "modernize-use-transparent-functors", "modernize-use-uncaught-exceptions", "modernize-use-using", "performance-*", // Remove some pedantic stylistic requirements. "-google-readability-casting", // C++ casts not always necessary and may be verbose "-google-readability-todo", // do not require TODO(info) ] cc_defaults { name: "mediametrics_flags_defaults", // https://clang.llvm.org/docs/UsersManual.html#command-line-options // https://clang.llvm.org/docs/DiagnosticsReference.html cflags: [ "-Wall", "-Wdeprecated", "-Werror", "-Werror=implicit-fallthrough", "-Werror=sometimes-uninitialized", "-Werror=conditional-uninitialized", "-Wextra", "-Wredundant-decls", "-Wshadow", "-Wstrict-aliasing", "-fstrict-aliasing", "-Wthread-safety", //"-Wthread-safety-negative", // experimental - looks broken in R. "-Wunreachable-code", "-Wunreachable-code-break", "-Wunreachable-code-return", "-Wunused", "-Wused-but-marked-unused", ], // https://clang.llvm.org/extra/clang-tidy/ tidy: true, tidy_checks: tidy_errors, tidy_checks_as_errors: tidy_errors, tidy_flags: [ "-format-style='file'", "--header-filter='frameworks/av/services/mediametrics/'", ], } cc_binary { name: "mediametrics", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "main_mediametrics.cpp", Loading @@ -22,17 +108,13 @@ cc_binary { init_rc: [ "mediametrics.rc", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } cc_library_shared { name: "libmediametricsservice", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "AudioAnalytics.cpp", Loading Loading @@ -73,11 +155,4 @@ cc_library_shared { include_dirs: [ "system/media/audio_utils/include", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], }
services/mediametrics/AudioAnalytics.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -594,4 +594,4 @@ void AudioAnalytics::DeviceConnection::expire() { #endif } } // namespace android } // namespace android::mediametrics
services/mediametrics/AudioPowerUsage.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -160,7 +160,7 @@ bool AudioPowerUsage::saveAsItem_l( return true; //ignore unknown device } for (auto item : mItems) { for (const auto& item : mItems) { int32_t item_type = 0, item_device = 0; double item_volume = 0.; int64_t item_duration_ns = 0; Loading Loading @@ -259,8 +259,8 @@ void AudioPowerUsage::checkMode(const std::shared_ptr<const mediametrics::Item>& const int64_t endCallNs = item->getTimestamp(); const int64_t durationNs = endCallNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endCallNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endCallNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } } else if (mode == "AUDIO_MODE_IN_CALL") { // entering call mode Loading @@ -287,8 +287,8 @@ void AudioPowerUsage::checkVoiceVolume(const std::shared_ptr<const mediametrics: const int64_t timeNs = item->getTimestamp(); const int64_t durationNs = timeNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (timeNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(timeNs - mVolumeTimeNs)) / durationNs; mVolumeTimeNs = timeNs; } } Loading Loading @@ -318,8 +318,8 @@ void AudioPowerUsage::checkCreatePatch(const std::shared_ptr<const mediametrics: const int64_t endDeviceNs = item->getTimestamp(); const int64_t durationNs = endDeviceNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endDeviceNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endDeviceNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } // reset statistics Loading Loading @@ -391,4 +391,4 @@ std::pair<std::string, int32_t> AudioPowerUsage::dump(int limit) const { return { ss.str(), slot }; } } // namespace android } // namespace android::mediametrics
services/mediametrics/MediaMetricsService.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ namespace android { using namespace mediametrics; using mediametrics::Item; using mediametrics::startsWith; // individual records kept in memory: age or count // age: <= 28 hours (1 1/6 days) Loading Loading @@ -63,7 +64,7 @@ nsecs_t MediaMetricsService::roundTime(nsecs_t timeNs) bool MediaMetricsService::useUidForPackage( const std::string& package, const std::string& installer) { if (strchr(package.c_str(), '.') == NULL) { if (strchr(package.c_str(), '.') == nullptr) { return false; // not of form 'com.whatever...'; assume internal and ok } else if (strncmp(package.c_str(), "android.", 8) == 0) { return false; // android.* packages are assumed fine Loading Loading @@ -203,9 +204,9 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele // Overwrite package name and version if the caller was untrusted or empty if (!isTrusted || item->getPkgName().empty()) { const uid_t uid = item->getUid(); const uid_t uidItem = item->getUid(); const auto [ pkgName, version ] = MediaMetricsService::getSanitizedPackageNameAndVersionCode(uid); MediaMetricsService::getSanitizedPackageNameAndVersionCode(uidItem); item->setPkgName(pkgName); item->setPkgVersionCode(version); } Loading Loading @@ -320,7 +321,7 @@ status_t MediaMetricsService::dump(int fd, const Vector<String16>& args) String8 value(args[i]); char *endp; const char *p = value.string(); long long sec = strtoll(p, &endp, 10); const auto sec = (int64_t)strtoll(p, &endp, 10); if (endp == p || *endp != '\0' || sec == 0) { sinceNs = 0; } else if (sec < 0) { Loading
services/mediametrics/TimeMachine.h +5 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <any> #include <map> #include <mutex> #include <sstream> #include <string> #include <variant> Loading Loading @@ -81,6 +82,8 @@ private: , mCreationTime(time) , mLastModificationTime(time) { (void)mCreationTime; // suppress unused warning. // allowUid allows an untrusted client with a matching uid to set properties // in this key. // If allowUid == (uid_t)-1, no untrusted client may set properties in the key. Loading Loading @@ -209,7 +212,7 @@ private: const std::string mKey; const uid_t mAllowUid; const int64_t mCreationTime __unused; const int64_t mCreationTime; int64_t mLastModificationTime; std::map<std::string /* property */, PropertyHistory> mPropertyMap; Loading Loading @@ -442,7 +445,7 @@ public: ++it) { if (ll <= 0) break; if (prefix != nullptr && !startsWith(it->first, prefix)) break; std::lock_guard lock(getLockForKey(it->first)); std::lock_guard lock2(getLockForKey(it->first)); auto [s, l] = it->second->dump(ll, sinceNs); ss << s; ll -= l; Loading