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 #include "dcamera_time_statistician.h"
16 #include "distributed_hardware_log.h"
17 #include "distributed_camera_constants.h"
18 #include <memory>
19
20 namespace OHOS {
21 namespace DistributedHardware {
CalProcessTime(const std::shared_ptr<IFeedableData> & data)22 void DCameraTimeStatistician::CalProcessTime(const std::shared_ptr<IFeedableData>& data)
23 {
24 TimeStatistician::CalProcessTime(data);
25 std::shared_ptr<DataBuffer> dataBuffer = std::reinterpret_pointer_cast<DataBuffer>(data);
26 DCameraFrameInfo frameInfo = dataBuffer->frameInfo_;
27 int64_t encode = frameInfo.timePonit.finishEncode - frameInfo.timePonit.startEncode;
28 int64_t trans = frameInfo.timePonit.recv - frameInfo.timePonit.send + frameInfo.offset;
29 int64_t decode = frameInfo.timePonit.finishDecode - frameInfo.timePonit.startDecode;
30 int64_t decode2Scale = frameInfo.timePonit.startScale - frameInfo.timePonit.finishDecode;
31 int64_t scale = frameInfo.timePonit.finishScale - frameInfo.timePonit.startScale;
32 int64_t recv2Feed = frameInfo.timePonit.startSmooth - frameInfo.timePonit.recv;
33 SetFrameIndex(frameInfo.index);
34 averEncodeTime_ = CalAverValue(encode, encodeTimeSum_);
35 averTransTime_ = CalAverValue(trans, transTimeSum_);
36 averDecodeTime_ = CalAverValue(decode, decodeTimeSum_);
37 averDecode2ScaleTime_ = CalAverValue(decode2Scale, decode2ScaleTimeSum_);
38 averScaleTime_ = CalAverValue(scale, scaleTimeSum_);
39 averRecv2FeedTime_ = CalAverValue(recv2Feed, recv2FeedTimeSum_);
40 SetRecvTime(frameInfo.timePonit.recv);
41 DHLOGD("Encode %{public}" PRId64", trans %{public}" PRId64", decode %{public}" PRId64", decode2Scale %{public}"
42 PRId64", scale %{public}" PRId64", recv2Feed %{public}" PRId64", averEncode %{public}" PRId64
43 " averTrans %{public}" PRId64", averDecode %{public}" PRId64", averDecode2Scale %{public}" PRId64
44 ", averScale %{public}" PRId64", averRecv2Feed %{public}" PRId64, encode, trans,
45 decode, decode2Scale, scale, recv2Feed, averEncodeTime_, averTransTime_, averDecodeTime_,
46 averDecode2ScaleTime_, averScaleTime_, averRecv2FeedTime_);
47 }
48
CalWholeProcessTime(const std::shared_ptr<DataBuffer> & data)49 void DCameraTimeStatistician::CalWholeProcessTime(const std::shared_ptr<DataBuffer>& data)
50 {
51 DCameraFrameInfo frameInfo = data->frameInfo_;
52 int64_t smooth = frameInfo.timePonit.finishSmooth - frameInfo.timePonit.startSmooth;
53 int64_t sink = frameInfo.timePonit.send - frameInfo.timePonit.startEncode;
54 int64_t source = frameInfo.timePonit.finishSmooth - frameInfo.timePonit.recv;
55 int64_t whole = frameInfo.timePonit.finishSmooth - frameInfo.timePonit.startEncode + frameInfo.offset;
56 int64_t self = frameInfo.timePonit.finishSmooth - frameInfo.timePonit.finishDecode;
57 averSmoothTime_ = CalAverValue(smooth, smoothTimeSum_);
58 averSourceTime_ = CalAverValue(source, sourceTimeSum_);
59 averWholeTime_ = CalAverValue(whole, wholeTimeSum_);
60 DHLOGD("Smooth %{public}" PRId64", sink %{public}" PRId64", source %{public}" PRId64", whole %{public}" PRId64
61 ", self %{public}" PRId64", averSmooth %{public}" PRId64", averSource %{public}" PRId64", averWhole %{public}"
62 PRId64, smooth, sink, source, whole, self, averSmoothTime_, averSourceTime_, averWholeTime_);
63 }
64
SetFrameIndex(const int32_t index)65 void DCameraTimeStatistician::SetFrameIndex(const int32_t index)
66 {
67 frameIndex_ = index;
68 }
69
CalAverValue(int64_t & value,int64_t & valueSum)70 int64_t DCameraTimeStatistician::CalAverValue(int64_t& value, int64_t& valueSum)
71 {
72 if (frameIndex_ == FRAME_HEAD) {
73 return 0;
74 }
75 valueSum += value;
76 return valueSum / frameIndex_;
77 }
78
GetAverEncodeTime()79 int64_t DCameraTimeStatistician::GetAverEncodeTime()
80 {
81 return averEncodeTime_;
82 }
83
GetAverTransTime()84 int64_t DCameraTimeStatistician::GetAverTransTime()
85 {
86 return averTransTime_;
87 }
88
GetAverDecodeTime()89 int64_t DCameraTimeStatistician::GetAverDecodeTime()
90 {
91 return averDecodeTime_;
92 }
93
GetAverDecode2ScaleTime()94 int64_t DCameraTimeStatistician::GetAverDecode2ScaleTime()
95 {
96 return averDecode2ScaleTime_;
97 }
98
GetAverScaleTime()99 int64_t DCameraTimeStatistician::GetAverScaleTime()
100 {
101 return averScaleTime_;
102 }
103
GetAverRecv2FeedTime()104 int64_t DCameraTimeStatistician::GetAverRecv2FeedTime()
105 {
106 return averRecv2FeedTime_;
107 }
108
GetAverSmoothTime()109 int64_t DCameraTimeStatistician::GetAverSmoothTime()
110 {
111 return averSmoothTime_;
112 }
113
GetRecv2FeedTime()114 int64_t DCameraTimeStatistician::GetRecv2FeedTime()
115 {
116 return averRecv2FeedTime_;
117 }
118
GetAverSourceTime()119 int64_t DCameraTimeStatistician::GetAverSourceTime()
120 {
121 return averSourceTime_;
122 }
123
GetAverWholeTime()124 int64_t DCameraTimeStatistician::GetAverWholeTime()
125 {
126 return averWholeTime_;
127 }
128
GetRecvTime()129 int64_t DCameraTimeStatistician::GetRecvTime()
130 {
131 return recvTime_;
132 }
133
SetRecvTime(const int64_t recvTime)134 void DCameraTimeStatistician::SetRecvTime(const int64_t recvTime)
135 {
136 recvTime_ = recvTime;
137 }
138 } // namespace DistributedHardware
139 } // namespace OHOS