1 /* 2 * Copyright (c) 2022-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 #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 NAPI_SET_SESSION_EVENT_TASK_ID = 9, 48 NAPI_SEND_COMMON_COMMAND_TASK_ID = 10, 49 NAPI_SKIP_TO_QUEUE_ITEM_TASK_ID = 11, 50 NAPI_SET_AV_QUEUE_TITLE_TASK_ID = 12, 51 NAPI_SET_AV_QUEUE_ITEMS_TASK_ID = 13, 52 NAPI_SET_EXTRAS_TASK_ID = 14, 53 NAPI_START_CAST_DISCOVERY_TASK_ID = 15, 54 NAPI_STOP_CAST_DISCOVERY_TASK_ID = 16, 55 NAPI_SET_DISCOVERABLE_TASK_ID = 17, 56 NAPI_START_CAST_TASK_ID = 18, 57 NAPI_STOP_CAST_TASK_ID = 19, 58 NAPI_CREATE_CAST_CONTROLLER_TASK_ID = 20, 59 NAPI_SEND_CUSTOM_DATA_TASK_ID = 21, 60 NAPI_CAST_CONTROLLER_SEND_CONTROL_COMMAND_TASK_ID = 22, 61 NAPI_CAST_CONTROLLER_START_TASK_ID = 23, 62 NAPI_CAST_CONTROLLER_PREPARE_TASK_ID = 24, 63 NAPI_CAST_CONTROLLER_UPDATE_MEDIA_INFO_TASK_ID = 25, 64 NAPI_CAST_CONTROLLER_GET_DURATION_TASK_ID = 26, 65 NAPI_CAST_CONTROLLER_GET_POSITION_TASK_ID = 27, 66 NAPI_CAST_CONTROLLER_GET_VOLUME_TASK_ID = 28, 67 NAPI_CAST_CONTROLLER_GET_LOOPMODE_TASK_ID = 29, 68 NAPI_CAST_CONTROLLER_GET_PLAY_SPEED_TASK_ID = 30, 69 NAPI_CAST_CONTROLLER_GET_PLAY_STATE_TASK_ID = 31, 70 NAPI_CAST_CONTROLLER_GET_CURRENT_ITEM_TASK_ID = 32, 71 NAPI_CAST_CONTROLLER_SET_DISPLAY_SURFACE_TASK_ID = 33, 72 NAPI_CAST_CONTROLLER_SEND_CUSTOM_DATA_TASK_ID = 34, 73 NAPI_SET_AVCALL_META_DATA_TASK_ID = 35, 74 NAPI_SET_AV_CALL_STATE_TASK_ID = 36, 75 NAPI_PROVIDE_KEY_RESPONSE_TASK_ID = 37, 76 NAPI_START_DEVICE_LOGGING_TASK_ID = 38, 77 NAPI_STOP_DEVICE_LOGGING_TASK_ID = 39, 78 NAPI_CAST_PICKER_HELPER_TASK_ID = 40, 79 NAPI_CAST_CONTROL_GET_SUPPORT_DECODER_ID = 41, 80 NAPI_CAST_CONTROL_GET_RECOMMEND_RESOLUTION_LEVEL_ID = 42, 81 NAPI_CAST_CONTROL_GET_SUPPORT_HDR_CAPABILITIES_ID = 43, 82 NAPI_CAST_CONTROL_GET_SUPPORT_PLAY_SPEED_ID = 44, 83 }; 84 #ifdef ENBABLE_AVSESSION_TRACE_CONTROL 85 class __attribute__((visibility("default"))) AVSessionTrace { 86 public: AVSessionTrace(const std::string & traceName)87 explicit AVSessionTrace(const std::string& traceName) 88 { 89 std::string avSessionTrace("AVSession:"); 90 avSessionTrace += traceName; 91 StartTrace(HITRACE_TAG_ZMEDIA, avSessionTrace); 92 isSync_ = true; 93 } 94 TraceBegin(const std::string & traceName,int32_t taskId)95 static void TraceBegin(const std::string& traceName, int32_t taskId) 96 { 97 if (taskId <= INVALID_TASK_ID) { 98 return; 99 } 100 std::string traceBegin("AVSession:"); 101 traceBegin += traceName; 102 StartAsyncTrace(HITRACE_TAG_ZMEDIA, traceBegin, taskId); 103 } 104 TraceEnd(const std::string & traceName,int32_t taskId)105 static void TraceEnd(const std::string& traceName, int32_t taskId) 106 { 107 if (taskId <= INVALID_TASK_ID) { 108 return; 109 } 110 std::string traceEnd("AVSession:"); 111 traceEnd += traceName; 112 FinishAsyncTrace(HITRACE_TAG_ZMEDIA, traceEnd, taskId); 113 } 114 ~AVSessionTrace()115 ~AVSessionTrace() 116 { 117 if (isSync_) { 118 FinishTrace(HITRACE_TAG_ZMEDIA); 119 } 120 } 121 122 AVSessionTrace(const AVSessionTrace&) = delete; 123 AVSessionTrace& operator = (const AVSessionTrace&) = delete; 124 125 AVSessionTrace(AVSessionTrace&&) = delete; 126 AVSessionTrace& operator = (AVSessionTrace&&) = delete; 127 private: 128 bool isSync_ = false; 129 }; 130 #endif 131 } // namespace OHOS::AVSession 132 #endif // OHOS_AVSESSION_TRACE_H