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

Commit 806b6db0 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6520975 from 52e8d1b6 to mainline-release

Change-Id: If7709801ed1446b2c495fc1fc1009f668d2301b3
parents 4927669e 52e8d1b6
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <ctype.h>
#include <inttypes.h>
#include <algorithm>
#include <map>
#include <memory>
#include <stdint.h>
#include <stdlib.h>
@@ -204,6 +205,7 @@ private:
        Vector<size_t> encryptedsizes;
    };
    Vector<Sample> mCurrentSamples;
    std::map<off64_t, uint32_t> mDrmOffsets;

    MPEG4Source(const MPEG4Source &);
    MPEG4Source &operator=(const MPEG4Source &);
@@ -5153,6 +5155,9 @@ status_t MPEG4Source::parseChunk(off64_t *offset) {
                    if (chunk_type == FOURCC("moof")) {
                        mNextMoofOffset = *offset;
                        break;
                    } else if (chunk_type == FOURCC("mdat")) {
                        parseChunk(offset);
                        continue;
                    } else if (chunk_size == 0) {
                        break;
                    }
@@ -5214,6 +5219,22 @@ status_t MPEG4Source::parseChunk(off64_t *offset) {
            // parse DRM info if present
            ALOGV("MPEG4Source::parseChunk mdat");
            // if saiz/saoi was previously observed, do something with the sampleinfos
            status_t err = OK;
            auto kv = mDrmOffsets.lower_bound(*offset);
            if (kv != mDrmOffsets.end()) {
                auto drmoffset = kv->first;
                auto flags = kv->second;
                mDrmOffsets.erase(kv);
                ALOGV("mdat chunk_size %" PRIu64 " drmoffset %" PRId64 " offset %" PRId64,
                        chunk_size, drmoffset, *offset);
                if (chunk_size >= drmoffset - *offset) {
                    err = parseClearEncryptedSizes(drmoffset, false, flags,
                        chunk_size - (drmoffset - *offset));
                }
            }
            if (err != OK) {
                return err;
            }
            *offset += chunk_size;
            break;
        }
@@ -5395,8 +5416,10 @@ status_t MPEG4Source::parseSampleAuxiliaryInformationOffsets(
    off64_t drmoffset = mCurrentSampleInfoOffsets[0]; // from moof

    drmoffset += mCurrentMoofOffset;
    mDrmOffsets[drmoffset] = flags;
    ALOGV("saio drmoffset %" PRId64 " flags %u", drmoffset, flags);

    return parseClearEncryptedSizes(drmoffset, false, 0, mCurrentMoofSize);
    return OK;
}

status_t MPEG4Source::parseClearEncryptedSizes(
+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) {
Loading