• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #ifndef EVENT_AGGREGATE_H
17 #define EVENT_AGGREGATE_H
18 
19 #include <mutex>
20 #include "event_bean.h"
21 #include "audio_memo.h"
22 #include "media_monitor_policy.h"
23 #include "audio_info.h"
24 
25 using OHOS::AudioStandard::AudioStreamPolicyServiceDiedCallback;
26 
27 namespace OHOS {
28 namespace Media {
29 namespace MediaMonitor {
30 
31 enum DeviceChangeEvent {
32     FOR_DEVICE_EVENT = 0,
33     FOR_CAPTURE_MUTE_EVENT,
34     FOR_VOLUME_CHANGE_EVENT
35 };
36 
37 class EventAggregate {
38 public:
GetEventAggregate()39     static EventAggregate& GetEventAggregate()
40     {
41         static EventAggregate eventAggregate;
42         return eventAggregate;
43     }
44 
45     EventAggregate();
46     ~EventAggregate();
47 
48     void WriteEvent(std::shared_ptr<EventBean> &bean);
49 
50     void WriteInfo(int32_t fd, std::string &dumpString);
51 
52 private:
53     void UpdateAggregateEventList(std::shared_ptr<EventBean> &bean);
54     void HandleDeviceChangeEvent(std::shared_ptr<EventBean> &bean);
55     void HandleStreamChangeEvent(std::shared_ptr<EventBean> &bean);
56 
57     void HandleStreamExhaustedErrorEvent(std::shared_ptr<EventBean> &bean);
58     void HandleStreamCreateErrorEvent(std::shared_ptr<EventBean> &bean);
59     void HandleBackgroundSilentPlayback(std::shared_ptr<EventBean> &bean);
60     void HandleUnderrunStatistic(std::shared_ptr<EventBean> &bean);
61     void HandleForceUseDevice(std::shared_ptr<EventBean> &bean);
62     void HandleCaptureMutedStatusChange(std::shared_ptr<EventBean> &bean);
63     void HandleVolumeChange(std::shared_ptr<EventBean> &bean);
64 
65     void HandleCaptureMuted(std::shared_ptr<EventBean> &bean);
66     void HandleDeviceUsage(std::shared_ptr<EventBean> &bean);
67     void HandleStreamUsage(std::shared_ptr<EventBean> &bean);
68     void HandleStreamChangeForVolume(std::shared_ptr<EventBean> &bean);
69     void HandlePipeChange(std::shared_ptr<EventBean> &bean);
70     void HandleFocusMigrate(std::shared_ptr<EventBean> &bean);
71     void HandleJankPlaybackEvent(std::shared_ptr<EventBean> &bean);
72 
73     void AddToDeviceUsage(std::shared_ptr<EventBean> &bean, uint64_t curruntTime);
74     void AddToStreamUsage(std::shared_ptr<EventBean> &bean, uint64_t curruntTime);
75     void AddToCaptureMuteUsage(std::shared_ptr<EventBean> &bean, uint64_t curruntTime);
76     void AddToVolumeVector(std::shared_ptr<EventBean> &bean, uint64_t curruntTime);
77     void AddToStreamPropertyVector(std::shared_ptr<EventBean> &bean, uint64_t curruntTime);
78 
79     void HandleDeviceChangeForDeviceUsage(std::shared_ptr<EventBean> &bean);
80     void HandleDeviceChangeForCaptureMuted(std::shared_ptr<EventBean> &bean);
81     void HandleDeviceChangeForVolume(std::shared_ptr<EventBean> &bean);
82     void HandleDeviceChangeForDuration(const DeviceChangeEvent &event,
83         std::shared_ptr<EventBean> &bean, std::shared_ptr<EventBean> &beanInVector);
84     void HandleStreamPropertyStats(std::shared_ptr<EventBean> &bean);
85     void HandleExcludedOutputDevices(std::shared_ptr<EventBean> &bean);
86 
87     AudioMemo& audioMemo_;
88     MediaMonitorPolicy& mediaMonitorPolicy_;
89 
90     std::vector<std::shared_ptr<EventBean>> deviceUsageVector_;
91     std::vector<std::shared_ptr<EventBean>> streamUsageVector_;
92     std::vector<std::shared_ptr<EventBean>> captureMutedVector_;
93     std::vector<std::shared_ptr<EventBean>> volumeVector_;
94     std::vector<std::shared_ptr<EventBean>> streamPropertyVector_;
95 
96     // Record volume for stream state 2->5->2
97     int32_t systemVol_ = -1;
98 };
99 } // namespace MediaMonitor
100 } // namespace Media
101 } // namespace OHOS
102 #endif // EVENT_AGGREGATE_H