Files
multimedia_drm_framework/services/utils/drm_dfx.cpp
T
zhenghongda 1328f31bd6 Delete useless json.
Signed-off-by: zhenghongda <zhenghongda4@huawei.com>
2025-03-21 07:04:34 +00:00

288 lines
9.8 KiB
C++

/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* 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 "drm_dfx.h"
#include "drm_dfx_utils.h"
#include <unistd.h>
#include "drm_log.h"
#include "dump_usage.h"
#include "drm_error_code.h"
#include "securec.h"
#include "ipc_skeleton.h"
#include "hitrace/tracechain.h"
#include <cstdint>
namespace OHOS {
namespace DrmStandard {
using namespace OHOS::HiviewDFX;
constexpr uint32_t MIN_DECRYPTION_TIMES = 1000;
DrmEvent& DrmEvent::GetInstance()
{
static DrmEvent instance;
return instance;
}
int32_t DrmEvent::WriteServiceEvent(std::string eventName, OHOS::HiviewDFX::HiSysEvent::EventType type,
DrmServiveInfo &info)
{
int32_t res = DRM_INNER_ERR_OK;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, eventName, type,
"MODULE", info.module,
"SERVICE_NAME", info.serviceName,
"ACTION", info.action,
"MEMORY", info.memoryUsage);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("EventWrite failed, res = %d", res);
return res;
} else {
DRM_INFO_LOG("EventWrite success");
}
return DRM_INNER_ERR_OK;
}
int32_t DrmEvent::WriteLicenseEvent(std::string eventName, OHOS::HiviewDFX::HiSysEvent::EventType type,
DrmLicenseInfo &info)
{
int32_t res = DRM_INNER_ERR_OK;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, eventName, type,
"MODULE", info.module,
"APP_NAME", info.appName,
"INSTANCE_ID", info.instanceId,
"DRM_NAME", info.drmName,
"DRM_UUID", info.drmUuid,
"CLIENT_VERSION", info.clientVersion,
"LICENSE_TYPE", info.licenseType,
"GENERATION_DURATION", info.generationDuration,
"GENERATION_RESULT", info.generationResult,
"PROCESS_DURATION", info.processDuration,
"PROCESS_RESULT", info.processResult);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("EventWrite failed, res = %d", res);
return res;
} else {
DRM_INFO_LOG("EventWrite success");
}
return DRM_INNER_ERR_OK;
}
int32_t DrmEvent::WriteCertificateEvent(std::string eventName, OHOS::HiviewDFX::HiSysEvent::EventType type,
DrmCertificateInfo &info)
{
int32_t res = DRM_INNER_ERR_OK;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, eventName, type,
"MODULE", info.module,
"APP_NAME", info.appName,
"INSTANCE_ID", info.instanceId,
"DRM_NAME", info.drmName,
"DRM_UUID", info.drmUuid,
"CLIENT_VERSION", info.clientVersion,
"GENERATION_DURATION", info.generationDuration,
"GENERATION_RESULT", info.generationResult,
"PROCESS_DURATION", info.processDuration,
"PROCESS_RESULT", info.processResult,
"CALL_SERVER_TIME", info.callServerTime,
"SERVER_COST_DURATION", info.serverCostDuration,
"SERVER_RESULT", info.serverResult);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("EventWrite failed, res = %d", res);
return res;
} else {
DRM_INFO_LOG("EventWrite success");
}
return DRM_INNER_ERR_OK;
}
int32_t DrmEvent::WriteFaultEvent(std::string eventName, OHOS::HiviewDFX::HiSysEvent::EventType type,
DrmFaultInfo &info)
{
int32_t res = DRM_INNER_ERR_OK;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, eventName, type,
"MODULE", info.module,
"APP_NAME", info.appName,
"INSTANCE_ID", info.instanceId,
"ERROR_CODE", info.errorCode,
"ERROR_MESG", info.errorMesg,
"EXTRA_MESG", info.extraMesg);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("EventWrite failed, res = %d", res);
return res;
} else {
DRM_INFO_LOG("EventWrite success");
}
return DRM_INNER_ERR_OK;
}
int32_t DrmEvent::WriteDecryptionEvent(std::string eventName, OHOS::HiviewDFX::HiSysEvent::EventType type,
DrmDecryptionInfo &info)
{
int32_t res = DRM_INNER_ERR_OK;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, eventName, type,
"MODULE", info.module,
"APP_NAME", info.appName,
"INSTANCE_ID", info.instanceId,
"ERROR_CODE", info.errorCode,
"ERROR_MESG", info.errorMesg,
"DECRYPT_ALGO", info.decryptAlgo,
"DECRYPT_KEYID", info.decryptKeyid,
"DECRYPT_IV", info.decryptIv);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("EventWrite failed, res = %d", res);
return res;
} else {
DRM_INFO_LOG("EventWrite success");
}
return DRM_INNER_ERR_OK;
}
int32_t ReportServiceBehaviorEvent(std::string serviceName, std::string action)
{
DrmEvent event;
OHOS::HiviewDFX::DumpUsage dumpUse;
uint32_t memoryUsage = dumpUse.GetPss(getpid());
struct DrmServiveInfo drmServiveInfo = {
"DRM_SERVICE",
0,
serviceName,
action,
memoryUsage,
};
return event.WriteServiceEvent("DRM_SERVICE_INFO", OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
drmServiveInfo);
}
int32_t ReportLicenseBehaviorEvent(StatisticsInfo statisticsInfo, std::string licenseType, DownLoadInfo downLoadInfo)
{
DrmEvent event;
struct DrmLicenseInfo drmLicenseInfo = {
"DRM_SERVICE",
0,
GetClientBundleName(IPCSkeleton::GetCallingUid()),
std::to_string(HiTraceChain::GetId().GetChainId()),
statisticsInfo.pluginName,
statisticsInfo.pluginUuid,
statisticsInfo.versionName,
licenseType,
downLoadInfo.generationDuration,
downLoadInfo.generationResult,
downLoadInfo.processDuration,
downLoadInfo.processResult,
};
return event.WriteLicenseEvent("DRM_LICENSE_DOWNLOAD_INFO", OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
drmLicenseInfo);
}
int32_t ReportCertificateBehaviorEvent(StatisticsInfo statisticsInfo, DownLoadInfo downLoadInfo,
uint32_t callServerTime, uint32_t serverCostDuration, std::string serverResult)
{
DrmEvent event;
struct DrmCertificateInfo drmCertificateInfo = {
"DRM_SERVICE",
0,
GetClientBundleName(IPCSkeleton::GetCallingUid()),
std::to_string(HiTraceChain::GetId().GetChainId()),
statisticsInfo.pluginName,
statisticsInfo.pluginUuid,
statisticsInfo.versionName,
downLoadInfo.generationDuration,
downLoadInfo.generationResult,
downLoadInfo.processDuration,
downLoadInfo.processResult,
callServerTime,
serverCostDuration,
serverResult,
};
return event.WriteCertificateEvent("DRM_CERTIFICATE_DOWNLOAD_INFO",
OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, drmCertificateInfo);
}
int32_t ReportFaultEvent(uint32_t errorCode, std::string errorMesg, std::string extraMesg)
{
DrmEvent event;
struct DrmFaultInfo drmFaultInfo = {
"DRM_SERVICE",
GetClientBundleName(IPCSkeleton::GetCallingUid()),
std::to_string(HiTraceChain::GetId().GetChainId()),
errorCode,
errorMesg,
extraMesg,
};
return event.WriteFaultEvent("DRM_COMMON_FAILURE", OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, drmFaultInfo);
}
int32_t ReportDecryptionFaultEvent(int32_t errorCode, std::string errorMesg, std::string decryptAlgo,
std::string decryptKeyid, std::string decryptIv)
{
DrmEvent event;
struct DrmDecryptionInfo drmDecryptionInfo = {
"DRM_SERVICE",
GetClientBundleName(IPCSkeleton::GetCallingUid()),
std::to_string(HiTraceChain::GetId().GetChainId()),
errorCode,
errorMesg,
decryptAlgo,
decryptKeyid,
decryptIv,
};
return event.WriteDecryptionEvent("DRM_DECRYPTION_FAILURE", OHOS::HiviewDFX::HiSysEvent::EventType::FAULT,
drmDecryptionInfo);
}
DownLoadInfo InitDownLoadInfo(uint32_t generationDuration, std::string generationResult, uint32_t processDuration,
std::string processResult)
{
struct DownLoadInfo downLoadInfo = {
generationDuration,
generationResult,
processDuration,
processResult,
};
return downLoadInfo;
}
void ReportDecryptionStatisticsEvent(uint64_t instanceId, std::string appName,
DecryptionStatistics &statistics)
{
DRM_INFO_LOG("ReportDecryptionStatisticsEvent.");
int32_t res = DRM_INNER_ERR_OK;
if (statistics.decryptTimes < MIN_DECRYPTION_TIMES) {
return;
}
uint32_t avgSize = statistics.decryptSumSize / statistics.decryptTimes;
uint32_t avgDuration = statistics.decryptSumDuration / statistics.decryptTimes;
res = HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA,
"DRM_STATISTICS",
HiviewDFX::HiSysEvent::EventType::STATISTIC,
"APP_NAME", appName,
"INSTANCE_ID", instanceId,
"ERROR_CODE", statistics.errCode,
"ERROR_MESG", statistics.errMessage,
"DECRYPT_TIMES", statistics.decryptTimes,
"DECRYPT_AVG_SIZE", avgSize,
"DECRYPT_AVG_DURATION", avgDuration,
"DECRYPT_MAX_SIZE", statistics.decryptMaxSize,
"DECRYPT_MAX_DURATION", statistics.decryptMaxDuration);
if (res != DRM_INNER_ERR_OK) {
DRM_ERR_LOG("DRM_STATISTICS Event Write failed, res = %d", res);
} else {
DRM_INFO_LOG("DRM_STATISTICS Event Write success");
}
DRM_INFO_LOG("ReportDecryptionStatisticsEvent done!");
}
} // namespace DrmStandard
} // namespace OHOS