• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "trace_strategy_factory.h"
16 
17 #include "hiview_logger.h"
18 #include "trace_utils.h"
19 
20 namespace OHOS::HiviewDFX {
21 namespace {
22 DEFINE_LOG_TAG("UCollectUtil-TraceCollector");
23 }
24 
25 namespace CleanThreshold {
26 const uint32_t XPERF = 3;
27 const uint32_t RELIABILITY = 3;
28 const uint32_t OTHER = 5;
29 const uint32_t SCREEN = 1;
30 const uint32_t BETACLUB = 2;
31 const uint32_t ZIP_FILE = 20;
32 const uint32_t TELE_ZIP_FILE = 20;
33 const uint32_t APP_FILE = 40;
34 }
35 
CreateTraceStrategy(UCollect::TraceCaller caller,uint32_t maxDuration,uint64_t happenTime)36 auto TraceStrategyFactory::CreateTraceStrategy(UCollect::TraceCaller caller, uint32_t maxDuration, uint64_t happenTime)
37     ->std::shared_ptr<TraceStrategy>
38 {
39     StrategyParam strategyParam {maxDuration, happenTime, EnumToString(caller)};
40     switch (caller) {
41         case UCollect::TraceCaller::XPERF:
42             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
43                 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::XPERF),
44                 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
45         case UCollect::TraceCaller::RELIABILITY:
46             return std::make_shared<TraceAsyncStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
47                 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
48                     CleanThreshold::RELIABILITY),
49                 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
50         case UCollect::TraceCaller::XPOWER:
51         case UCollect::TraceCaller::HIVIEW:
52             return std::make_shared<TraceFlowControlStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
53                 std::make_shared<TraceZipHandler>(UNIFIED_SHARE_PATH, strategyParam.caller, CleanThreshold::ZIP_FILE));
54         case UCollect::TraceCaller::OTHER:
55             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
56                 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::OTHER),
57                     nullptr);
58         case UCollect::TraceCaller::SCREEN:
59             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
60                 std::make_shared<TraceSyncCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
61                     CleanThreshold::SCREEN), nullptr);
62         default:
63             return nullptr;
64     }
65 }
66 
CreateTraceStrategy(UCollect::TraceClient client,uint32_t maxDuration,uint64_t happenTime)67 auto TraceStrategyFactory::CreateTraceStrategy(UCollect::TraceClient client, uint32_t maxDuration, uint64_t happenTime)
68     ->std::shared_ptr<TraceStrategy>
69 {
70     StrategyParam strategyParam {maxDuration, happenTime, ClientToString(client)};
71     switch (client) {
72         case UCollect::TraceClient::COMMAND:
73             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMAND, nullptr, nullptr);
74         case UCollect::TraceClient::COMMON_DEV:
75             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
76                 std::make_shared<TraceCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller, CleanThreshold::OTHER),
77                     nullptr);
78         case UCollect::TraceClient::BETACLUB:
79             return std::make_shared<TraceDevStrategy>(strategyParam, TraceScenario::TRACE_COMMON,
80                 std::make_shared<TraceSyncCopyHandler>(UNIFIED_SPECIAL_PATH, strategyParam.caller,
81                    CleanThreshold::BETACLUB), nullptr);
82         default:
83             return nullptr;
84     }
85 }
86 
CreateStrategy(UCollect::TeleModule module,uint32_t maxDuration,uint64_t happenTime)87 auto TraceStrategyFactory::CreateStrategy(UCollect::TeleModule module, uint32_t maxDuration, uint64_t happenTime)
88     ->std::shared_ptr<TelemetryStrategy>
89 {
90     return std::make_shared<TelemetryStrategy>(StrategyParam {maxDuration, happenTime, ModuleToString(module)},
91         std::make_shared<TraceZipHandler>(UNIFIED_TELEMETRY_PATH, BusinessName::TELEMETRY,
92             CleanThreshold::TELE_ZIP_FILE));
93 }
94 
CreateAppStrategy(std::shared_ptr<AppCallerEvent> appCallerEvent)95 auto TraceStrategyFactory::CreateAppStrategy(std::shared_ptr<AppCallerEvent> appCallerEvent)
96     ->std::shared_ptr<TraceAppStrategy>
97 {
98     return std::make_shared<TraceAppStrategy>(appCallerEvent,
99         std::make_shared<TraceAppHandler>(UNIFIED_SHARE_PATH, CleanThreshold::APP_FILE));
100 }
101 }
102