1/* 2 * Copyright (C) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <avcodec_sysevent.h> 17#include <unistd.h> 18#include <unordered_map> 19#include "securec.h" 20#include "avcodec_log.h" 21#include "avcodec_errors.h" 22 23namespace { 24constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_FRAMEWORK, "AVCodecDFX"}; 25constexpr char HISYSEVENT_DOMAIN_AVCODEC[] = "AV_CODEC"; 26 27const std::unordered_map<OHOS::MediaAVCodec::FaultType, std::string> FAULT_TYPE_TO_STRING = { 28 {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_FREEZE, "Freeze"}, 29 {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_CRASH, "Crash"}, 30 {OHOS::MediaAVCodec::FaultType::FAULT_TYPE_INNER_ERROR, "Inner error"}, 31}; 32} // namespace 33 34namespace OHOS { 35namespace MediaAVCodec { 36void FaultEventWrite(FaultType faultType, const std::string& msg, const std::string& module) 37{ 38 CHECK_AND_RETURN_LOG(faultType >= FaultType::FAULT_TYPE_FREEZE && faultType < FaultType::FAULT_TYPE_END, 39 "Invalid fault type: %{public}d", faultType); 40 HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "FAULT", 41 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 42 "MODULE", module, 43 "FAULTTYPE", FAULT_TYPE_TO_STRING.at(faultType), 44 "MSG", msg); 45} 46 47void ServiceStartEventWrite(uint32_t useTime, const std::string& module) 48{ 49 uint64_t useMemory = 5000; 50 HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "SERVICE_START_INFO", 51 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, "MODULE", module.c_str(), "TIME", useTime, 52 "MEMORY", useMemory); 53} 54 55void CodecStartEventWrite(CodecDfxInfo& codecDfxInfo) 56{ 57 HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "CODEC_START_INFO", 58 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 59 "CLIENT_PID", codecDfxInfo.clientPid, 60 "CLIENT_UID", codecDfxInfo.clientUid, 61 "CODEC_INSTANCE_ID", codecDfxInfo.codecInstanceId, 62 "CODEC_NAME", codecDfxInfo.codecName, 63 "CODEC_IS_VENDOR", codecDfxInfo.codecIsVendor, 64 "CODEC_MODE", codecDfxInfo.codecMode, 65 "ENCODER_BITRATE", codecDfxInfo.encoderBitRate, 66 "VIDEO_WIDTH", codecDfxInfo.videoWidth, 67 "VIDEO_HEIGHT", codecDfxInfo.videoHeight, 68 "VIDEO_FRAMERATE", codecDfxInfo.videoFrameRate, 69 "VIDEO_PIXEL_FORMAT", codecDfxInfo.videoPixelFormat, 70 "AUDIO_CHANNEL_COUNT", codecDfxInfo.audioChannelCount, 71 "AUDIO_SAMPLE_RATE", codecDfxInfo.audioSampleRate); 72} 73 74void CodecStopEventWrite(pid_t clientPid, uid_t clientUid, int32_t codecInstanceId) 75{ 76 HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "CODEC_STOP_INFO", 77 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 78 "CLIENT_PID", clientPid, "CLIENT_UID", clientUid, "CODEC_INSTANCE_ID", codecInstanceId); 79} 80 81void DemuxerInitEventWrite(uint32_t downloadSize, std::string sourceType) 82{ 83 HiSysEventWrite(HISYSEVENT_DOMAIN_AVCODEC, "DEMUXER_INIT_INFO", 84 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR, 85 "DOWNLOAD_SIZE", downloadSize, "SOURCE_TYPE", sourceType); 86} 87 88void FaultDemuxerEventWrite(DemuxerFaultInfo& demuxerFaultInfo) 89{ 90 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "DEMUXER_FAILURE", 91 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 92 "APP_NAME", demuxerFaultInfo.appName, 93 "INSTANCE_ID", demuxerFaultInfo.instanceId, 94 "CALLER_TYPE", demuxerFaultInfo.callerType, 95 "SOURCE_TYPE", demuxerFaultInfo.sourceType, 96 "CONTAINER_FORMAT", demuxerFaultInfo.containerFormat, 97 "STREAM_TYPE", demuxerFaultInfo.streamType, 98 "ERROR_MESG", demuxerFaultInfo.errMsg); 99} 100 101void FaultAudioCodecEventWrite(AudioCodecFaultInfo& audioCodecFaultInfo) 102{ 103 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "AUDIO_CODEC_FAILURE", 104 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 105 "APP_NAME", audioCodecFaultInfo.appName, 106 "INSTANCE_ID", audioCodecFaultInfo.instanceId, 107 "CALLER_TYPE", audioCodecFaultInfo.callerType, 108 "AUDIO_CODEC", audioCodecFaultInfo.audioCodec, 109 "ERROR_MESG", audioCodecFaultInfo.errMsg); 110} 111 112void FaultVideoCodecEventWrite(VideoCodecFaultInfo& videoCodecFaultInfo) 113{ 114 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "VIDEO_CODEC_FAILURE", 115 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 116 "APP_NAME", videoCodecFaultInfo.appName, 117 "INSTANCE_ID", videoCodecFaultInfo.instanceId, 118 "CALLER_TYPE", videoCodecFaultInfo.callerType, 119 "VIDEO_CODEC", videoCodecFaultInfo.videoCodec, 120 "ERROR_MESG", videoCodecFaultInfo.errMsg); 121} 122 123void FaultMuxerEventWrite(MuxerFaultInfo& muxerFaultInfo) 124{ 125 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "MUXER_FAILURE", 126 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 127 "APP_NAME", muxerFaultInfo.appName, 128 "INSTANCE_ID", muxerFaultInfo.instanceId, 129 "CALLER_TYPE", muxerFaultInfo.callerType, 130 "VIDEO_CODEC", muxerFaultInfo.videoCodec, 131 "AUDIO_CODEC", muxerFaultInfo.audioCodec, 132 "CONTAINER_FORMAT", muxerFaultInfo.containerFormat, 133 "ERROR_MESG", muxerFaultInfo.errMsg); 134} 135 136void FaultRecordAudioEventWrite(AudioSourceFaultInfo& audioSourceFaultInfo) 137{ 138 HiSysEventWrite(OHOS::HiviewDFX::HiSysEvent::Domain::MULTI_MEDIA, "RECORD_AUDIO_FAILURE", 139 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, 140 "APP_NAME", audioSourceFaultInfo.appName, 141 "INSTANCE_ID", audioSourceFaultInfo.instanceId, 142 "AUDIO_SOURCE_TYPE", audioSourceFaultInfo.audioSourceType, 143 "ERROR_MESG", audioSourceFaultInfo.errMsg); 144} 145} // namespace MediaAVCodec 146} // namespace OHOS 147