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

Commit cfcd0f8d authored by Vova Sharaienko's avatar Vova Sharaienko Committed by Automerger Merge Worker
Browse files

Merge "Vendor Atoms: collect stats from an AIDL implementation" am: 8362331b...

Merge "Vendor Atoms: collect stats from an AIDL implementation" am: 8362331b am: c64adcab am: c60ed803 am: 37872f61

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2508120



Change-Id: I99c3bb3a18dca2258825eb93c8cdc809d234d8e2
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d516bfc5 37872f61
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ cc_library_shared {
        "android.frameworks.stats@1.0",
        "android.frameworks.stats-V2-ndk",
        "libbinder_ndk",
        "libexpresslog",
        "libhidlbase",
        "liblog",
        "libstatslog",
+16 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@

#include "StatsAidl.h"

#include <Counter.h>
#include <log/log.h>
#include <stats_annotations.h>
#include <stats_event.h>
@@ -29,11 +30,18 @@

#include <unordered_map>

namespace {
    static const char* g_AtomErrorMetricName =
        "statsd_errors.value_report_vendor_atom_errors_count";
}

namespace aidl {
namespace android {
namespace frameworks {
namespace stats {

using ::android::expresslog::Counter;

template <typename E>
constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept {
    return static_cast<typename std::underlying_type<E>::type>(e);
@@ -86,12 +94,14 @@ bool write_field_annotations(AStatsEvent* event, const std::vector<Annotation>&
ndk::ScopedAStatus StatsHal::reportVendorAtom(const VendorAtom& vendorAtom) {
    if (vendorAtom.atomId < 100000 || vendorAtom.atomId >= 200000) {
        ALOGE("Atom ID %ld is not a valid vendor atom ID", (long)vendorAtom.atomId);
        Counter::logIncrement(g_AtomErrorMetricName);
        return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
                -1, "Not a valid vendor atom ID");
    }
    if (vendorAtom.reverseDomainName.length() > 50) {
        ALOGE("Vendor atom reverse domain name %s is too long.",
              vendorAtom.reverseDomainName.c_str());
        Counter::logIncrement(g_AtomErrorMetricName);
        return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
                -1, "Vendor atom reverse domain name is too long");
    }
@@ -100,8 +110,9 @@ ndk::ScopedAStatus StatsHal::reportVendorAtom(const VendorAtom& vendorAtom) {

    if (vendorAtom.atomAnnotations) {
        if (!write_atom_annotations(event, *vendorAtom.atomAnnotations)) {
            ALOGE("Atom ID %ld has incompatible atom level annotation", (long)vendorAtom.atomId);
            AStatsEvent_release(event);
            ALOGE("Atom ID %ld has incompatible atom level annotation", (long)vendorAtom.atomId);
            Counter::logIncrement(g_AtomErrorMetricName);
            return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
                    -1, "invalid atom annotation");
        }
@@ -222,6 +233,7 @@ ndk::ScopedAStatus StatsHal::reportVendorAtom(const VendorAtom& vendorAtom) {
            default: {
                AStatsEvent_release(event);
                ALOGE("Atom ID %ld has invalid atomValue.getTag", (long)vendorAtom.atomId);
                Counter::logIncrement(g_AtomErrorMetricName);
                return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
                        -1, "invalid atomValue.getTag");
                break;
@@ -235,9 +247,10 @@ ndk::ScopedAStatus StatsHal::reportVendorAtom(const VendorAtom& vendorAtom) {
            VLOG("Atom ID %ld has %ld annotations for field #%ld", (long)vendorAtom.atomId,
                 (long)fieldAnnotations.size(), (long)atomValueIdx + 2);
            if (!write_field_annotations(event, fieldAnnotations)) {
                AStatsEvent_release(event);
                ALOGE("Atom ID %ld has incompatible field level annotation for field #%ld",
                      (long)vendorAtom.atomId, (long)atomValueIdx + 2);
                AStatsEvent_release(event);
                Counter::logIncrement(g_AtomErrorMetricName);
                return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
                        -1, "invalid atom field annotation");
            }
@@ -249,6 +262,7 @@ ndk::ScopedAStatus StatsHal::reportVendorAtom(const VendorAtom& vendorAtom) {
    AStatsEvent_release(event);
    if (ret <= 0) {
        ALOGE("Error writing Atom ID %ld. Result: %d", (long)vendorAtom.atomId, ret);
        Counter::logIncrement(g_AtomErrorMetricName);
    }
    return ret <= 0 ? ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(ret,
                                                                              "report atom failed")