/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.

 * ubs-io is licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *      http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#ifndef BIO_TRACE_H
#define BIO_TRACE_H

#include "htracer.h"

namespace ock {
namespace bio {
constexpr uint32_t SERVICE_ID = 0;

enum SdkTracerType
{
    SDK_TRACE_START = htracer::GetTraceId(SERVICE_ID, 0U),
    SDK_TRACE_INIT_LOAD_VIEW,
    SDK_TRACE_CREATE_CACHE,
    SDK_TRACE_DESTROY_CACHE,
    SDK_TRACE_QOS_APPLY,
    SDK_TRACE_QOS_HANG_IO,
    SDK_TRACE_QOS_PRELOAD,
    SDK_TRACE_QOS_RELEASE,
    SDK_TRACE_QOS_WAKE_OK,
    SDK_TRACE_QOS_WAKE_BUSY,
    SDK_TRACE_QOS_WAKE_RETRY,
    SDK_TRACE_PUT,
    SDK_TRACE_PUT_TO_UNDERFS,
    SDK_TRACE_GET_TO_UNDERFS,
    SDK_TRACE_PUT_ALIGN_IO,
    SDK_TRACE_PUT_GET_PT,
    SDK_TRACE_PUT_ALLOC_OFF,
    SDK_TRACE_PUT_SEND,
    SDK_TRACE_PUT_LOCAL_SYNC,
    SDK_TRACE_PUT_REMOTE_SYNC,
    SDK_TRACE_PUT_PREPARE_GET_SLICE,
    SDK_TRACE_PUT_PREPARE_COPY_DATA,
    SDK_TRACE_PUT_PREPARE_SLICE_SERIALIZATION,
    SDK_TRACE_PUT_PREPARE,
    SDK_TRACE_GET,
    SDK_TRACE_GET_SEND,
    SDK_TRACE_GET_LOCAL,
    SDK_TRACE_GET_REMOTE,
    SDK_TRACE_GET_COPY2U,
    SDK_TRACE_DELETE,
    SDK_TRACE_LOAD,
    SDK_TRACE_LISTALL,
    SDK_TRACE_STAT,
    SDK_TRACE_NOTIFYUPDATE,
    SDK_TRACE_UPDATEFINISH,
    SDK_TRACE_CHECKREADY,
    SDK_TRACE_ALLOC_SPACE,

    SDK_TRACE_W_S_1_4K,
    SDK_TRACE_W_S_4_8K,
    SDK_TRACE_W_S_8_64K,
    SDK_TRACE_W_S_64_128K,
    SDK_TRACE_W_S_128_256K,
    SDK_TRACE_W_S_256K_1M,
    SDK_TRACE_W_S_1_2M,
    SDK_TRACE_W_S_2_4M,
    SDK_TRACE_W_S_4M,
    SDK_TRACE_R_S_1_4K,
    SDK_TRACE_R_S_4_8K,
    SDK_TRACE_R_S_8_64K,
    SDK_TRACE_R_S_64_128K,
    SDK_TRACE_R_S_128_256K,
    SDK_TRACE_R_S_256K_1M,
    SDK_TRACE_R_S_1_2M,
    SDK_TRACE_R_S_2_4M,
    SDK_TRACE_R_S_4M,
    SDK_TRACE_END,
};

enum MirrorTracerType
{
    MIRROR_TRACE_START = SDK_TRACE_END,
    MIRROR_TRACE_PUT_RECEIVE_LOCAL,
    MIRROR_TRACE_PUT_RECEIVE_REMOTE,
    MIRROR_TRACE_PUT,
    MIRROR_TRACE_PUT_READ_DATA,
    MIRROR_TRACE_QOS_ALLOC,
    MIRROR_TRACE_QOS_ROLLBACK,
    MIRROR_TRACE_QOS_RELEASE,
    MIRROR_TRACE_GET_WRITE_DATA,
    MIRROR_TRACE_GET_COPY_DATA,
    MIRROR_TRACE_GET,
    MIRROR_TRACE_DEL,
    MIRROR_TRACE_STAT,
    MIRROR_TRACE_LOAD,
    MIRROR_TRACE_CREATE_FLOW,
    MIRROR_TRACE_DESTROY_FLOW,
    MIRROR_TRACE_SYNC_DATA,
    MIRROR_TRACE_GET_EVICT_OFFSET,
    MIRROR_TRACE_GET_EVICT_OFFSET_HDL,
    MIRROR_TRACE_INTERCEPTOR_READ_START,
    MIRROR_TRACE_INTERCEPTOR_READ_SCH,
    MIRROR_TRACE_INTERCEPTOR_READ,
    MIRROR_TRACE_INTERCEPTOR_READ_REPLY,
    MIRROR_TRACE_INTERCEPTOR_WRITE_START,
    MIRROR_TRACE_INTERCEPTOR_WRITE_SCH,
    MIRROR_TRACE_INTERCEPTOR_WRITE,
    MIRROR_TRACE_INTERCEPTOR_WRITE_REPLY,

    MIRROR_TRACE_W_S_1_4K,
    MIRROR_TRACE_W_S_4_8K,
    MIRROR_TRACE_W_S_8_64K,
    MIRROR_TRACE_W_S_64_128K,
    MIRROR_TRACE_W_S_128_256K,
    MIRROR_TRACE_W_S_256K_1M,
    MIRROR_TRACE_W_S_1_2M,
    MIRROR_TRACE_W_S_2_4M,
    MIRROR_TRACE_W_S_4M,
    MIRROR_TRACE_R_S_1_4K,
    MIRROR_TRACE_R_S_4_8K,
    MIRROR_TRACE_R_S_8_64K,
    MIRROR_TRACE_R_S_64_128K,
    MIRROR_TRACE_R_S_128_256K,
    MIRROR_TRACE_R_S_256K_1M,
    MIRROR_TRACE_R_S_1_2M,
    MIRROR_TRACE_R_S_2_4M,
    MIRROR_TRACE_R_S_4M,
    MIRROR_TRACE_END,
};

enum WcacheTracerType
{
    WCACHE_TRACE_START = MIRROR_TRACE_END,
    WCACHE_TRACE_ALLOC_ID,
    WCACHE_TRACE_CREATE_OBJ,
    WCACHE_TRACE_DESTROY_OBJ,
    WCACHE_TRACE_GET_SLICE,
    WCACHE_TRACE_PUT_QUERY_EXIST,
    WCACHE_TRACE_PUT_WRITE_FLOW,
    WCACHE_TRACE_PUT_ADD_EVICT,
    WCACHE_TRACE_PUT_INSERT_INDEX,
    WCACHE_TRACE_PUT,
    WCACHE_TRACE_PUT_GET_WCACHE,
    WCACHE_TRACE_PUT_NEGOTIATE_QUE,
    WCACHE_TRACE_POP_NEGOTIATE_QUE,
    WCACHE_TRACE_REMOVE_NEGOTIATE_QUE,
    WCACHE_TRACE_PUT_MEM_BACK,
    WCACHE_TRACE_PUT_DISK_BACK,
    WCACHE_TRACE_PUT_UNDERFS_BACK,
    WCACHE_TRACE_PUT_BYPASS,
    WCACHE_TRACE_GET_QUERY_INDEX,
    WCACHE_TRACE_GET_READ_DATA,
    WCACHE_TRACE_GET,
    WCACHE_TRACE_DEL,
    WCACHE_TRACE_STAT,
    WCACHE_TRACE_EVICT2DISK,
    WCACHE_TRACE_EVICT2UNDERFS,
    WCACHE_TRACE_QUOTA_FREE,
    WCACHE_TRACE_PUT_RCACHE,
    WCACHE_TRACE_RECOVER,
    WCACHE_TRACE_GET_EVICT_OFFSET,
    WCACHE_TRACE_FLUSH,
    WCACHE_TRACE_CLEAR_EXPIRED,
    WCACHE_TRACE_GET_NEGOTIATE,
    WCACHE_TRACE_NEGOTIATE_UPDATE,
    WCACHE_ADD_EVICT_QUEUE,
    WCACHE_DEL_NEGOTIATE_ARRAY,
    WCACHE_TRACE_END,
};

enum RcacheTracerType
{
    RCACHE_TRACE_START = WCACHE_TRACE_END,
    RCACHE_TRACE_CREATE_OBJ,
    RCACHE_TRACE_DESTROY_OBJ,
    RCACHE_TRACE_PUT_GET_SLICE,
    RCACHE_TRACE_PUT_ALLOC_CHUNK,
    RCACHE_TRACE_PUT_INSERT_INDEX,
    RCACHE_TRACE_PUT_INSERT_EVICT,
    RCACHE_TRACE_PUT_INSERT_TRUNC,
    RCACHE_TRACE_PUT,
    RCACHE_TRACE_GET_QUERY_INDEX,
    RCACHE_TRACE_GET_WRITE_DATA,
    RCACHE_TRACE_GET_UPDATE_EVICT,
    RCACHE_TRACE_GET,
    RCACHE_TRACE_DEL_QUERY_INDEX,
    RCACHE_TRACE_DEL,
    RCACHE_TRACE_LOAD,
    RCACHE_TRACE_EVICT2DISK,
    RCACHE_TRACE_EVICT2NULL,
    RCACHE_TRACE_CLEAR_EXPIRED,
    RCACHE_TRACE_END,
};

enum FlowTracerType
{
    FLOW_TRACE_START = RCACHE_TRACE_END,
    FLOW_TRACE_CREATE_OBJ,
    FLOW_TRACE_DESTROY_OBJ,
    FLOW_TRACE_GETALL_OBJ,
    FLOW_TRACE_PRELOAD_OBJ,
    FLOW_TRACE_PRELOAD_ALLOC,
    FLOW_TRACE_GETADDR,
    FLOW_TRACE_PRELOAD_MEMORY,
    FLOW_TRACE_TRUNCATE,
    FLOW_TRACE_HOLDWAIT,
    FLOW_TRACE_SEAL,
    FLOW_TRACE_END,
};

enum BdmTracerType
{
    BDM_TRACE_START = FLOW_TRACE_END,
    BDM_TRACE_SEG_ALLOC,
    BDM_TRACE_SEG_FREE,
    BDM_TRACE_WRITE_SYNC,
    BDM_TRACE_READ_SYNC,
    BDM_TRACE_WRITE_ASYNC,
    BDM_TRACE_READ_ASYNC,
    BDM_TRACE_END,
};

enum MemTracerType
{
    MEM_TRACE_START = BDM_TRACE_END,
    MEM_TRACE_SEG_ALLOC,
    MEM_TRACE_SEG_FREE,
    MEM_TRACE_END,
};

enum UfsTracerType
{
    UFS_TRACE_START = MEM_TRACE_END,
    EXTERNAL_TRACE_GET,
    UFS_TRACE_PUT,
    UFS_TRACE_GET,
    UFS_TRACE_DEL,
    UFS_TRACE_STAT,
    UFS_TRACE_LIST,
    UFS_TRACE_END,
};

enum NetTracerType
{
    NET_TRACE_START = UFS_TRACE_END,
    NET_TRACE_IPC_HDL,
    NET_TRACE_SHEDULE,
    NET_TRACE_GET_CTRL_CHANNEL,
    NET_TRACE_GET_DATA_CHANNEL,
    NET_TRACE_SYNC_CALL_V1,
    NET_TRACE_SYNC_CALL_V2,
    NET_TRACE_SYNC_CALL_BUFF,
    NET_TRACE_ASYNC_CALL,
    NET_TRACE_ASYNC_CALL_BUFF,
    NET_TRACE_SYNC_READ_V1,
    NET_TRACE_SYNC_READ_V2,
    NET_TRACE_SYNC_WRITE_V1,
    NET_TRACE_SYNC_WRITE_V2,
    NET_TRACE_REPLY_SYNC,
    NET_TRACE_REPLY_ASYNC,
    NET_TRACE_END,
};

enum CmTracerType
{
    CM_TRACE_START = NET_TRACE_END,
    CM_TRACE_NOTIFY_NODEVIEW,
    CM_TRACE_NOTIFY_PTVIEW,
    CM_TRACE_END,
};

#define BIO_TRACE_START(TP_ID) TRACE_DELAY_BEGIN(TP_ID)
#define BIO_TRACE_END(TP_ID, RET_CODE) TRACE_DELAY_END(TP_ID, RET_CODE)
#define BIO_TRACE_ASYNC_BEGIN(TP_ID) TRACE_ASYNC_DELAY_BEGIN(TP_ID)
#define BIO_TRACE_ASYNC_END(TP_ID, RET_CODE, START_TIME) TRACE_ASYNC_DELAY_END(TP_ID, RET_CODE, START_TIME)
} // namespace bio
} // namespace ock
#endif // BIO_TRACE_H