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

Commit 82ea6be9 authored by Robert Shih's avatar Robert Shih
Browse files

mediadrm: use stable C interface to record metrics

Bug: 134787536
Test: dumpsys media.metrics
Change-Id: I0156052334d0b52691cde82b71c5dc0f40d13fb5
parent b752850e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ cc_library_shared {
        "liblog",
        "libmedia",
        "libmediadrmmetrics_lite",
        "libmediametrics",
        "libmediametrics#1",
        "libmediautils",
        "libresourcemanagerservice",
        "libstagefright_foundation",
+10 −7
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <android/media/BnResourceManagerClient.h>
#include <hidl/ServiceManagement.h>
#include <media/EventMetric.h>
#include <media/MediaMetrics.h>
#include <media/PluginMetricsReporting.h>
#include <media/drm/DrmAPI.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -453,6 +454,7 @@ sp<IDrmPlugin> DrmHal::makeDrmPlugin(const sp<IDrmFactory>& factory,
        const uint8_t uuid[16], const String8& appPackageName) {
    mAppPackageName = appPackageName;
    mMetrics.SetAppPackageName(appPackageName);
    mMetrics.SetAppUid(IPCThreadState::self()->getCallingUid());

    sp<IDrmPlugin> plugin;
    Return<void> hResult = factory->createPlugin(uuid, appPackageName.string(),
@@ -1574,21 +1576,21 @@ void DrmHal::binderDied(const wp<IBinder> &the_late_who __unused)

void DrmHal::reportFrameworkMetrics() const
{
    std::unique_ptr<MediaAnalyticsItem> item(MediaAnalyticsItem::create("mediadrm"));
    item->setPkgName(mMetrics.GetAppPackageName().c_str());
    mediametrics_handle_t item(mediametrics_create("mediadrm"));
    mediametrics_setUid(item, mMetrics.GetAppUid());
    String8 vendor;
    String8 description;
    status_t result = getPropertyStringInternal(String8("vendor"), vendor);
    if (result != OK) {
        ALOGE("Failed to get vendor from drm plugin: %d", result);
    } else {
        item->setCString("vendor", vendor.c_str());
        mediametrics_setCString(item, "vendor", vendor.c_str());
    }
    result = getPropertyStringInternal(String8("description"), description);
    if (result != OK) {
        ALOGE("Failed to get description from drm plugin: %d", result);
    } else {
        item->setCString("description", description.c_str());
        mediametrics_setCString(item, "description", description.c_str());
    }

    std::string serializedMetrics;
@@ -1599,11 +1601,12 @@ void DrmHal::reportFrameworkMetrics() const
    std::string b64EncodedMetrics = toBase64StringNoPad(serializedMetrics.data(),
                                                        serializedMetrics.size());
    if (!b64EncodedMetrics.empty()) {
        item->setCString("serialized_metrics", b64EncodedMetrics.c_str());
        mediametrics_setCString(item, "serialized_metrics", b64EncodedMetrics.c_str());
    }
    if (!item->selfrecord()) {
    if (!mediametrics_selfRecord(item)) {
        ALOGE("Failed to self record framework metrics");
    }
    mediametrics_delete(item);
}

void DrmHal::reportPluginMetrics() const
@@ -1617,7 +1620,7 @@ void DrmHal::reportPluginMetrics() const
        std::string metricsString = toBase64StringNoPad(metricsVector.array(),
                                                        metricsVector.size());
        status_t res = android::reportDrmPluginMetrics(metricsString, vendor,
                                                       description, mAppPackageName);
                                                       description, mMetrics.GetAppUid());
        if (res != OK) {
            ALOGE("Metrics were retrieved but could not be reported: %d", res);
        }
+9 −9
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@

#include <inttypes.h>

#include <media/MediaAnalyticsItem.h>
#include <media/MediaMetrics.h>
#include <utils/Log.h>


@@ -33,18 +33,18 @@ constexpr char kSerializedMetricsField[] = "serialized_metrics";

status_t reportVendorMetrics(const std::string& metrics,
                             const String8& name,
                             const String8& appPackageName) {
    std::unique_ptr<MediaAnalyticsItem> analyticsItem(MediaAnalyticsItem::create(name.c_str()));
    std::string app_package_name(appPackageName.c_str(), appPackageName.size());
    analyticsItem->setPkgName(app_package_name);
                             uid_t appUid) {
    mediametrics_handle_t analyticsItem(mediametrics_create(name.c_str()));
    mediametrics_setUid(analyticsItem, appUid);
    if (metrics.size() > 0) {
        analyticsItem->setCString(kSerializedMetricsField, metrics.c_str());
        mediametrics_setCString(analyticsItem, kSerializedMetricsField, metrics.c_str());
    }

    if (!analyticsItem->selfrecord()) {
    if (!mediametrics_selfRecord(analyticsItem)) {
      ALOGE("%s: selfrecord() returned false", __func__);
    }

    mediametrics_delete(analyticsItem);
    return OK;
}

@@ -67,13 +67,13 @@ String8 sanitize(const String8& input) {
status_t reportDrmPluginMetrics(const std::string& b64EncodedMetrics,
                                const String8& vendor,
                                const String8& description,
                                const String8& appPackageName) {
                                uid_t appUid) {

    String8 name = String8::format("drm.vendor.%s.%s",
                                   sanitize(vendor).c_str(),
                                   sanitize(description).c_str());

    return reportVendorMetrics(b64EncodedMetrics, name, appPackageName);
    return reportVendorMetrics(b64EncodedMetrics, name, appUid);
}

}  // namespace android
+0 −1
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@
#include <android/hardware/drm/1.2/IDrmPlugin.h>
#include <android/hardware/drm/1.2/IDrmPluginListener.h>

#include <media/MediaAnalyticsItem.h>
#include <mediadrm/DrmMetrics.h>
#include <mediadrm/DrmSessionManager.h>
#include <mediadrm/IDrm.h>
+5 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <binder/PersistableBundle.h>
#include <media/CounterMetric.h>
#include <media/EventMetric.h>
#include <sys/types.h>

namespace android {

@@ -71,6 +72,9 @@ class MediaDrmMetrics {
  void SetAppPackageName(const String8& appPackageName) { mAppPackageName = appPackageName; }
  const String8& GetAppPackageName() { return mAppPackageName; }

  void SetAppUid(uid_t appUid) { mAppUid = appUid; }
  uid_t GetAppUid() const { return mAppUid; }

  // Export the metrics to a PersistableBundle.
  void Export(os::PersistableBundle* metricsBundle);

@@ -131,6 +135,7 @@ class MediaDrmMetrics {
  std::map<std::string, std::pair<int64_t, int64_t>> mSessionLifespans;

  String8 mAppPackageName;
  uid_t mAppUid{~0u};
};

}  // namespace android
Loading