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
23 namespace {
24 constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN_FRAMEWORK, "AVCodecDFX"};
25 constexpr char HISYSEVENT_DOMAIN_AVCODEC[] = "AV_CODEC";
26
27 const 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
34 namespace OHOS {
35 namespace MediaAVCodec {
FaultEventWrite(FaultType faultType, const std::string& msg, const std::string& module)36 void 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
ServiceStartEventWrite(uint32_t useTime, const std::string& module)47 void 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
CodecStartEventWrite(CodecDfxInfo& codecDfxInfo)55 void 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
CodecStopEventWrite(pid_t clientPid, uid_t clientUid, int32_t codecInstanceId)74 void 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
DemuxerInitEventWrite(uint32_t downloadSize, std::string sourceType)81 void 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
FaultDemuxerEventWrite(DemuxerFaultInfo& demuxerFaultInfo)88 void 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
FaultAudioCodecEventWrite(AudioCodecFaultInfo& audioCodecFaultInfo)101 void 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
FaultVideoCodecEventWrite(VideoCodecFaultInfo& videoCodecFaultInfo)112 void 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
FaultMuxerEventWrite(MuxerFaultInfo& muxerFaultInfo)123 void 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
FaultRecordAudioEventWrite(AudioSourceFaultInfo& audioSourceFaultInfo)136 void 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