1 /* 2 * Copyright (c) 2022 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 OHOS_AVSESSION_TRACE_H 17 #define OHOS_AVSESSION_TRACE_H 18 19 #include <string> 20 21 #ifdef ENBABLE_AVSESSION_TRACE_CONTROL 22 #include "hitrace_meter.h" 23 #endif 24 25 #ifdef ENBABLE_AVSESSION_TRACE_CONTROL 26 #define AVSESSION_TRACE_SYNC_START(traceName) AVSessionTrace trace(traceName) 27 #define AVSESSION_TRACE_ASYNC_START(traceName, taskId) AVSessionTrace::TraceBegin(traceName, taskId) 28 #define AVSESSION_TRACE_ASYNC_END(traceName, taskId) AVSessionTrace::TraceEnd(traceName, taskId) 29 #else 30 #define AVSESSION_TRACE_SYNC_START(...) 31 #define AVSESSION_TRACE_ASYNC_START(...) 32 #define AVSESSION_TRACE_ASYNC_END(...) 33 34 #endif 35 namespace OHOS::AVSession { 36 enum AVSessionTraceTaskId : int32_t { 37 INVALID_TASK_ID = -1, 38 NAPI_SET_AV_META_DATA_TASK_ID = 0, 39 NAPI_SET_AV_PLAYBACK_STATE_TASK_ID = 1, 40 NAPI_SEND_AV_KEY_EVENT_TASK_ID = 2, 41 NAPI_SEND_CONTROL_COMMAND_TASK_ID = 3, 42 NAPI_CREATE_AVSESSION_TASK_ID = 4, 43 NAPI_CREATE_CONTROLLER_TASK_ID = 5, 44 NAPI_SEND_SYSTEM_AV_KEY_EVENT_TASK_ID = 6, 45 NAPI_SEND_SYSTEM_CONTROL_COMMAND_TASK_ID = 7, 46 NAPI_CAST_AUDIO_TASK_ID = 8 47 }; 48 #ifdef ENBABLE_AVSESSION_TRACE_CONTROL 49 class __attribute__((visibility("default"))) AVSessionTrace { 50 public: AVSessionTrace(const std::string & traceName)51 explicit AVSessionTrace(const std::string& traceName) 52 { 53 std::string avSessionTrace("AVSession:"); 54 avSessionTrace += traceName; 55 StartTrace(HITRACE_TAG_ZMEDIA, avSessionTrace); 56 isSync_ = true; 57 } 58 TraceBegin(const std::string & traceName,int32_t taskId)59 static void TraceBegin(const std::string& traceName, int32_t taskId) 60 { 61 if (taskId <= INVALID_TASK_ID) { 62 return; 63 } 64 std::string traceBegin("AVSession:"); 65 traceBegin += traceName; 66 StartAsyncTrace(HITRACE_TAG_ZMEDIA, traceBegin, taskId); 67 } 68 TraceEnd(const std::string & traceName,int32_t taskId)69 static void TraceEnd(const std::string& traceName, int32_t taskId) 70 { 71 if (taskId <= INVALID_TASK_ID) { 72 return; 73 } 74 std::string traceEnd("AVSession:"); 75 traceEnd += traceName; 76 FinishAsyncTrace(HITRACE_TAG_ZMEDIA, traceEnd, taskId); 77 } 78 ~AVSessionTrace()79 ~AVSessionTrace() 80 { 81 if (isSync_) { 82 FinishTrace(HITRACE_TAG_ZMEDIA); 83 } 84 } 85 86 AVSessionTrace(const AVSessionTrace&) = delete; 87 AVSessionTrace& operator = (const AVSessionTrace&) = delete; 88 89 AVSessionTrace(AVSessionTrace&&) = delete; 90 AVSessionTrace& operator = (AVSessionTrace&&) = delete; 91 private: 92 bool isSync_ = false; 93 }; 94 #endif 95 } // namespace OHOS::AVSession 96 #endif // OHOS_AVSESSION_TRACE_H