1 /*
2 * Copyright (c) 2023-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 "dps_video_report.h"
17
18 #include "dp_log.h"
19 #include "hisysevent.h"
20 #include "timer/steady_clock.h"
21
22 namespace OHOS {
23 namespace CameraStandard {
24 namespace DeferredProcessing {
25 static constexpr char CAMERA_FWK_UE[] = "CAMERA_FWK_UE";
26
DfxVideoReport()27 DfxVideoReport::DfxVideoReport()
28 {
29 DP_DEBUG_LOG("entered.");
30 }
31
~DfxVideoReport()32 DfxVideoReport::~DfxVideoReport()
33 {
34 DP_DEBUG_LOG("entered.");
35 }
36
ReportAddVideoEvent(const std::string & videoId,DpsCallerInfo callerInfo)37 void DfxVideoReport::ReportAddVideoEvent(const std::string &videoId, DpsCallerInfo callerInfo)
38 {
39 DP_DEBUG_LOG("ReportAddVideoEvent enter.");
40 VideoRecord videoRecord{
41 .videoId = videoId,
42 .calleBundle = callerInfo.bundleName,
43 .calleVersion = callerInfo.version,
44 .addTime = SteadyClock::GetTimestampMilli(),
45 };
46
47 VideoRecord videoRecordFound;
48 if (!processVideoInfo_.Find(videoId, videoRecordFound)) {
49 processVideoInfo_.Insert(videoId, videoRecord);
50 } else {
51 DP_ERR_LOG("ReportAddVideoEvent video has been added.");
52 }
53
54 HiSysEventWrite(CAMERA_FWK_UE,
55 "DPS_ADD_VIDEO",
56 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
57 EVENT_KEY_PNAMEID, callerInfo.bundleName,
58 EVENT_KEY_PVERSIONID, callerInfo.pid,
59 EVENT_KEY_VIDEOID, videoId);
60 }
61
ReportRemoveVideoEvent(const std::string & videoId,DpsCallerInfo callerInfo)62 void DfxVideoReport::ReportRemoveVideoEvent(const std::string &videoId, DpsCallerInfo callerInfo)
63 {
64 DP_DEBUG_LOG("ReportRemoveVideoEvent enter.");
65 VideoRecord videoRecordFound;
66 if (processVideoInfo_.Find(videoId, videoRecordFound)) {
67 processVideoInfo_.Erase(videoId);
68 }
69
70 HiSysEventWrite(CAMERA_FWK_UE,
71 "DPS_REMOVE_VIDEO",
72 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
73 EVENT_KEY_PNAMEID, callerInfo.bundleName,
74 EVENT_KEY_PVERSIONID, callerInfo.pid,
75 EVENT_KEY_VIDEOID, videoId);
76 }
77
ReportPauseVideoEvent(const std::string & videoId,int32_t pauseReason)78 void DfxVideoReport::ReportPauseVideoEvent(const std::string& videoId, int32_t pauseReason)
79 {
80 DP_DEBUG_LOG("ReportPauseVideoEvent enter.");
81 uint64_t processToPauseCost = 0;
82 std::string bundleName;
83 std::string version;
84 VideoRecord vr;
85 if (processVideoInfo_.Find(videoId, vr)) {
86 DP_DEBUG_LOG("ReportPauseVideoEvent videoId found.");
87 vr.pauseStartTime = SteadyClock::GetTimestampMilli();
88 processToPauseCost = vr.pauseStartTime - vr.processTime;
89 bundleName = vr.calleBundle;
90 version = vr.calleVersion;
91 } else {
92 DP_DEBUG_LOG("ReportPauseVideoEvent videoId not found.");
93 }
94
95 HiSysEventWrite(CAMERA_FWK_UE,
96 "DPS_PAUSE_VIDEO",
97 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
98 EVENT_KEY_PNAMEID, bundleName,
99 EVENT_KEY_PVERSIONID, version,
100 EVENT_KEY_VIDEOID, videoId,
101 EVENT_KEY_ABORTTYPE, pauseReason,
102 EVENT_KEY_ABORTTIME, processToPauseCost);
103 }
104
ReportResumeVideoEvent(const std::string & videoId)105 void DfxVideoReport::ReportResumeVideoEvent(const std::string &videoId)
106 {
107 DP_DEBUG_LOG("ReportResumeVideoEvent enter.");
108 uint64_t pauseToResumeCost = 0;
109 std::string bundleName;
110 std::string version;
111 VideoRecord vr;
112 if (processVideoInfo_.Find(videoId, vr)) {
113 DP_DEBUG_LOG("ReportResumeVideoEvent videoId found.");
114 if (vr.processTime == 0) {
115 // 首次开始分段式任务
116 DP_DEBUG_LOG("ReportResumeVideoEvent first process videoId:%{public}s", videoId.c_str());
117 vr.processTime = SteadyClock::GetTimestampMilli();
118 } else {
119 // 中断后再次开始分段式任务
120 vr.pauseEndTime = SteadyClock::GetTimestampMilli();
121 pauseToResumeCost = vr.pauseEndTime - vr.pauseStartTime;
122 vr.totlePauseTime += pauseToResumeCost;
123 bundleName = vr.calleBundle;
124 version = vr.calleVersion;
125 HiSysEventWrite(
126 CAMERA_FWK_UE,
127 "DPS_RESUME_VIDEO",
128 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
129 EVENT_KEY_PNAMEID, bundleName,
130 EVENT_KEY_PVERSIONID, version,
131 EVENT_KEY_VIDEOID, videoId,
132 EVENT_KEY_RECOVERTIME, pauseToResumeCost);
133 }
134 } else {
135 DP_DEBUG_LOG("ReportPauseVideoEvent videoId not found.");
136 }
137 }
138
ReportCompleteVideoEvent(const std::string & videoId)139 void DfxVideoReport::ReportCompleteVideoEvent(const std::string &videoId)
140 {
141 DP_DEBUG_LOG("ReportCompleteVideoEvent enter.");
142 uint64_t completeTime = 0;
143 uint64_t realCompleteTime = 0;
144 std::string bundleName;
145 std::string version;
146 VideoRecord vr;
147 if (processVideoInfo_.Find(videoId, vr)) {
148 DP_DEBUG_LOG("ReportCompleteVideoEvent videoId found.");
149 completeTime = SteadyClock::GetTimestampMilli() - vr.processTime;
150 realCompleteTime = completeTime - vr.totlePauseTime;
151 bundleName = vr.calleBundle;
152 version = vr.calleVersion;
153 } else {
154 DP_DEBUG_LOG("ReportCompleteVideoEvent videoId not found.");
155 }
156
157 HiSysEventWrite(CAMERA_FWK_UE,
158 "DPS_COMPLETE_VIDEO",
159 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
160 EVENT_KEY_PNAMEID, bundleName,
161 EVENT_KEY_PVERSIONID, version,
162 EVENT_KEY_VIDEOID, videoId,
163 EVENT_KEY_COMPLETETIME, completeTime,
164 EVENT_KEY_REALCOMPLETETIME, realCompleteTime);
165 }
166 } // namespace DeferredProcessing
167 } // namespace CameraStandard
168 } // namespace OHOS