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

Commit 5b3feebf authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Merge "MediaMetrics: Add and fix clang-tidy" into rvc-dev am: 666caaf1

Change-Id: I8b1f73ea503e9b805b2c18025cc85dc319c532ab
parents 5a0055e0 666caaf1
Loading
Loading
Loading
Loading
+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",
@@ -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",
@@ -73,11 +155,4 @@ cc_library_shared {
    include_dirs: [
        "system/media/audio_utils/include",
    ],

    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
        "-Wthread-safety",
    ],
}
+1 −1
Original line number Diff line number Diff line
@@ -594,4 +594,4 @@ void AudioAnalytics::DeviceConnection::expire() {
#endif
}

} // namespace android
} // namespace android::mediametrics
+8 −8
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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;
        }
    }
@@ -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
@@ -391,4 +391,4 @@ std::pair<std::string, int32_t> AudioPowerUsage::dump(int limit) const {
    return { ss.str(), slot };
}

} // namespace android
} // namespace android::mediametrics
+6 −5
Original line number Diff line number Diff line
@@ -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)
@@ -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
@@ -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);
    }
@@ -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) {
+5 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <any>
#include <map>
#include <mutex>
#include <sstream>
#include <string>
#include <variant>
@@ -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.
@@ -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;
@@ -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