blob: f5365455943314489eff295d6a0e60d67e80a27a [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <media/DrmMetrics.h>
namespace {
template<typename T>
void ExportCounterMetric(const android::CounterMetric<T>& counter,
android::MediaAnalyticsItem* item) {
std::string success_count_name = counter.metric_name() + "/ok/count";
std::string error_count_name = counter.metric_name() + "/error/count";
counter.ExportValues(
[&] (const android::status_t status, const int64_t value) {
if (status == android::OK) {
item->setInt64(success_count_name.c_str(), value);
} else {
int64_t total_errors(0);
item->getInt64(error_count_name.c_str(), &total_errors);
item->setInt64(error_count_name.c_str(), total_errors + value);
// TODO: Add support for exporting the list of error values.
// This probably needs to be added to MediaAnalyticsItem.
}
});
}
template<typename T>
void ExportEventMetric(const android::EventMetric<T>& event,
android::MediaAnalyticsItem* item) {
std::string success_count_name = event.metric_name() + "/ok/count";
std::string error_count_name = event.metric_name() + "/error/count";
std::string timing_name = event.metric_name() + "/average_time_micros";
event.ExportValues(
[&] (const android::status_t& status,
const android::EventStatistics& value) {
if (status == android::OK) {
item->setInt64(success_count_name.c_str(), value.count);
item->setInt64(timing_name.c_str(), value.mean);
} else {
int64_t total_errors(0);
item->getInt64(error_count_name.c_str(), &total_errors);
item->setInt64(error_count_name.c_str(),
total_errors + value.count);
// TODO: Add support for exporting the list of error values.
// This probably needs to be added to MediaAnalyticsItem.
}
});
}
} // namespace anonymous
namespace android {
MediaDrmMetrics::MediaDrmMetrics()
: mOpenSessionCounter("/drm/mediadrm/open_session", "status"),
mGetKeyRequestTiming("/drm/mediadrm/get_key_request", "status") {
}
void MediaDrmMetrics::Export(MediaAnalyticsItem* item) {
ExportCounterMetric(mOpenSessionCounter, item);
ExportEventMetric(mGetKeyRequestTiming, item);
}
} // namespace android