1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef DRM_METRICS_H_ 18 #define DRM_METRICS_H_ 19 20 #include <map> 21 22 #include <android/hardware/drm/1.0/types.h> 23 #include <android/hardware/drm/1.1/types.h> 24 #include <android/hardware/drm/1.2/types.h> 25 #include <binder/PersistableBundle.h> 26 #include <media/CounterMetric.h> 27 #include <media/EventMetric.h> 28 #include <sys/types.h> 29 30 namespace android { 31 32 /** 33 * This class contains the definition of metrics captured within MediaDrm. 34 * It also contains a method for exporting all of the metrics to a 35 * PersistableBundle. 36 */ 37 class MediaDrmMetrics { 38 public: 39 explicit MediaDrmMetrics(); ~MediaDrmMetrics()40 virtual ~MediaDrmMetrics() {}; 41 // Count of openSession calls. 42 CounterMetric<status_t> mOpenSessionCounter; 43 // Count of closeSession calls. 44 CounterMetric<status_t> mCloseSessionCounter; 45 // Count and timing of getKeyRequest calls. 46 EventMetric<status_t> mGetKeyRequestTimeUs; 47 // Count and timing of provideKeyResponse calls. 48 EventMetric<status_t> mProvideKeyResponseTimeUs; 49 // Count of getProvisionRequest calls. 50 CounterMetric<status_t> mGetProvisionRequestCounter; 51 // Count of provideProvisionResponse calls. 52 CounterMetric<status_t> mProvideProvisionResponseCounter; 53 // Count of key status events broken out by status type. 54 CounterMetric<uint32_t> mKeyStatusChangeCounter; 55 // Count of events broken out by event type 56 CounterMetric<uint32_t> mEventCounter; 57 58 // Count getPropertyByteArray calls to retrieve the device unique id. 59 CounterMetric<status_t> mGetDeviceUniqueIdCounter; 60 61 // Adds a session start time record. 62 void SetSessionStart(const Vector<uint8_t>& sessionId); 63 64 // Adds a session end time record. 65 void SetSessionEnd(const Vector<uint8_t>& sessionId); 66 67 // The app package name is the application package name that is using the 68 // instance. The app package name is held here for convenience. It is not 69 // serialized or exported with the metrics. SetAppPackageName(const String8 & appPackageName)70 void SetAppPackageName(const String8& appPackageName) { mAppPackageName = appPackageName; } GetAppPackageName()71 const String8& GetAppPackageName() { return mAppPackageName; } 72 SetAppUid(uid_t appUid)73 void SetAppUid(uid_t appUid) { mAppUid = appUid; } GetAppUid()74 uid_t GetAppUid() const { return mAppUid; } 75 76 // Get the serialized metrics. Metrics are formatted as a serialized 77 // DrmFrameworkMetrics proto. If there is a failure serializing the metrics, 78 // this returns an error. The parameter |serlializedMetrics| is owned by the 79 // caller and must not be null. 80 status_t GetSerializedMetrics(std::string* serializedMetrics); 81 82 // Get copy of session lifetimes. 83 std::map<std::string, std::pair<int64_t, int64_t>> GetSessionLifespans() const; 84 85 protected: 86 // This is visible for testing only. 87 virtual int64_t GetCurrentTimeMs(); 88 89 private: 90 // Session lifetimes. A pair of values representing the milliseconds since 91 // epoch, UTC. The first value is the start time, the second is the end time. 92 std::map<std::string, std::pair<int64_t, int64_t>> mSessionLifespans; 93 94 String8 mAppPackageName; 95 uid_t mAppUid{~0u}; 96 }; 97 98 } // namespace android 99 100 #endif // DRM_METRICS_H_ 101