/* -------------------------------------------------------------------------
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This file is part of the MindStudio project.
 *
 * MindStudio is licensed under 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.
 * -------------------------------------------------------------------------
*/
#include "csrc/common/inject/hccl_range_mark.h"
#include "csrc/activity/ascend/parser/mstx_parser.h"
#include "csrc/common/utils.h"
#include "csrc/activity/activity_manager.h"
#include "csrc/activity/ascend/parser/hccl_reporter.h"

namespace Mspti {
namespace Parser {
using namespace Mspti::Activity;
HcclInnerMark::HcclInnerMark(aclrtStream stream, HcclComm comm, std::shared_ptr<HcclOpDesc> opDesc)
{
    char commName[COMM_NAME_MAX_LENGTH];
    HcclGetCommName(comm, commName);
    opDesc->commName.assign(commName);
    Mspti::Parser::MstxParser::GetInstance()->InnerDeviceStartA(stream, markId);
    Mspti::Parser::HcclReporter::GetInstance()->RecordHcclOp(markId, opDesc);
};

HcclInnerMark::~HcclInnerMark()
{
    Mspti::Parser::MstxParser::GetInstance()->InnerDeviceEndA(markId);
}

std::unique_ptr<InnerMark> HcclMarkFactory::createMarker(aclrtStream stream, HcclComm comm,
                                                         std::shared_ptr<HcclOpDesc> opDesc)
{
    if (ActivityManager::GetInstance()->IsActivityKindEnable(MSPTI_ACTIVITY_KIND_HCCL)) {
        return std::move(static_cast<std::unique_ptr<InnerMark>>(
            std::make_unique<HcclInnerMark>(stream, comm, opDesc)));
    }
    return std::make_unique<InnerMark>();
}
}
};