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