/* * Copyright (C) 2019 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. */ //#define LOG_NDEBUG 0 #define LOG_TAG "iface_statsd" #include #include #include #include #include #include #include #include #include #include #include #include "MediaAnalyticsService.h" #include "iface_statsd.h" #include namespace android { // set of routines that crack a MediaAnalyticsItem // and send it off to statsd with the appropriate hooks // // each MediaAnalyticsItem type (extractor, codec, nuplayer, etc) // has its own routine to handle this. // bool enabled_statsd = true; struct statsd_hooks { const char *key; bool (*handler)(MediaAnalyticsItem *); }; // keep this sorted, so we can do binary searches struct statsd_hooks statsd_handlers[] = { { "audiopolicy", statsd_audiopolicy }, { "audiorecord", statsd_audiorecord }, { "audiothread", statsd_audiothread }, { "audiotrack", statsd_audiotrack }, { "codec", statsd_codec}, { "drm.vendor.Google.WidevineCDM", statsd_widevineCDM }, { "extractor", statsd_extractor }, { "mediadrm", statsd_mediadrm }, { "nuplayer", statsd_nuplayer }, { "nuplayer2", statsd_nuplayer }, { "recorder", statsd_recorder }, }; // give me a record, i'll look at the type and upload appropriately bool dump2Statsd(MediaAnalyticsItem *item) { if (item == NULL) return false; // get the key std::string key = item->getKey(); if (!enabled_statsd) { ALOGV("statsd logging disabled for record key=%s", key.c_str()); return false; } int i; for(i = 0;i < sizeof(statsd_handlers) / sizeof(statsd_handlers[0]) ; i++) { if (key == statsd_handlers[i].key) { return (*statsd_handlers[i].handler)(item); } } return false; } } // namespace android