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 16 //! Rust macros defined in hitracechain. 17 18 /// tracepoint hitracechain information 19 /// 20 /// # Example 21 /// 22 /// ``` 23 /// extern crate hitracechain; 24 /// 25 /// let trace_id = hitracechain::get_id(); 26 /// hitracechain::tracepoint!(hitracechain::HiTraceCommunicationMode::Default, 27 /// hitracechain::HiTraceTracepointType::Cs, &trace_id, 28 /// "chain id is {}, span id is {}, parent span id is {}", 29 /// trace_id.get_chain_id(), trace_id.get_span_id() 30 /// trace)id_get_parent_span_id()); 31 /// hitracechain::end(trace_id); 32 /// ``` 33 /// # Safty 34 /// 35 /// Call C ffi border function, all risks are under control. 36 /// 37 #[macro_export] 38 macro_rules! tracepoint { 39 ($communication_mode:expr, $tracepoint_type:expr, $p_id:expr, $($arg:tt)*) => { 40 let args = format!($($arg)*); 41 unsafe { 42 hitracechain::HiTraceChainTracepointExWrapper( 43 $communication_mode as std::ffi::c_int, 44 $tracepoint_type as std::ffi::c_int, 45 $p_id as *const hitracechain::HiTraceId, 46 std::ffi::CString::new(args).expect("").as_ptr() as *const std::ffi::c_char); 47 } 48 } 49 } 50 51 /// start a new trace 52 /// 53 /// # Example 54 /// 55 /// ``` 56 /// extern crate hitracechain; 57 /// 58 /// let trace_id = hitracechain::begin!("process name", hitracechain::HiTraceFlag::Default); 59 /// hitracechain::end(trace_id); 60 /// ``` 61 /// 62 #[macro_export] 63 macro_rules! begin { 64 ($process_name:literal, $trace_flag:expr) => { 65 hitracechain::begin($process_name, $trace_flag as i32); 66 } 67 }