• 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 "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