• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "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     auto iter = processVideoInfo_.find(videoId);
47     if (iter == processVideoInfo_.end()) {
48         processVideoInfo_.emplace(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     auto iter = processVideoInfo_.find(videoId);
65     if (iter != processVideoInfo_.end()) {
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     auto iter = processVideoInfo_.find(videoId);
84     if (iter != processVideoInfo_.end()) {
85         DP_DEBUG_LOG("ReportPauseVideoEvent videoId found.");
86         VideoRecord vr = iter->second;
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     auto iter = processVideoInfo_.find(videoId);
112     if (iter != processVideoInfo_.end()) {
113         DP_DEBUG_LOG("ReportResumeVideoEvent videoId found.");
114         VideoRecord vr = iter->second;
115         if (vr.processTime == 0) {
116             // 首次开始分段式任务
117             DP_DEBUG_LOG("ReportResumeVideoEvent first process videoId:%{public}s", videoId.c_str());
118             vr.processTime = SteadyClock::GetTimestampMilli();
119         } else {
120             // 中断后再次开始分段式任务
121             vr.pauseEndTime = SteadyClock::GetTimestampMilli();
122             pauseToResumeCost = vr.pauseEndTime - vr.pauseStartTime;
123             vr.totlePauseTime += pauseToResumeCost;
124             bundleName = vr.calleBundle;
125             version = vr.calleVersion;
126             HiSysEventWrite(
127                 CAMERA_FWK_UE,
128                 "DPS_RESUME_VIDEO",
129                 HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
130                 EVENT_KEY_PNAMEID, bundleName,
131                 EVENT_KEY_PVERSIONID, version,
132                 EVENT_KEY_VIDEOID, videoId,
133                 EVENT_KEY_RECOVERTIME, pauseToResumeCost);
134         }
135     } else {
136         DP_DEBUG_LOG("ReportPauseVideoEvent videoId not found.");
137     }
138 }
139 
ReportCompleteVideoEvent(const std::string & videoId)140 void DfxVideoReport::ReportCompleteVideoEvent(const std::string &videoId)
141 {
142     DP_DEBUG_LOG("ReportCompleteVideoEvent enter.");
143     uint64_t completeTime = 0;
144     uint64_t realCompleteTime = 0;
145     std::string bundleName;
146     std::string version;
147     auto iter = processVideoInfo_.find(videoId);
148     if (iter != processVideoInfo_.end()) {
149         DP_DEBUG_LOG("ReportCompleteVideoEvent videoId found.");
150         VideoRecord vr = iter->second;
151         completeTime = SteadyClock::GetTimestampMilli() - vr.processTime;
152         realCompleteTime = completeTime - vr.totlePauseTime;
153         bundleName = vr.calleBundle;
154         version = vr.calleVersion;
155     } else {
156         DP_DEBUG_LOG("ReportCompleteVideoEvent videoId not found.");
157     }
158 
159     HiSysEventWrite(CAMERA_FWK_UE,
160         "DPS_COMPLETE_VIDEO",
161         HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
162         EVENT_KEY_PNAMEID, bundleName,
163         EVENT_KEY_PVERSIONID, version,
164         EVENT_KEY_VIDEOID, videoId,
165         EVENT_KEY_COMPLETETIME, completeTime,
166         EVENT_KEY_REALCOMPLETETIME, realCompleteTime);
167 }
168 }  // namespace DeferredProcessing
169 }  // namespace CameraStandard
170 }  // namespace OHOS