14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_PGO_PROFILER_TESTS_PGO_CONTEXT_MOCK_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_PGO_PROFILER_TESTS_PGO_CONTEXT_MOCK_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include <memory>
204514f5e3Sopenharmony_ci
214514f5e3Sopenharmony_ci#include "ecmascript/log_wrapper.h"
224514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_context.h"
234514f5e3Sopenharmony_ci#include "ecmascript/base/file_header.h"
244514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_profiler_info.h"
254514f5e3Sopenharmony_ci#include "ecmascript/pgo_profiler/pgo_utils.h"
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_cinamespace panda::ecmascript::pgo {
284514f5e3Sopenharmony_ciclass PGOContextMock : public PGOContext {
294514f5e3Sopenharmony_cipublic:
304514f5e3Sopenharmony_ci    explicit PGOContextMock(base::FileHeaderBase::VersionType version)
314514f5e3Sopenharmony_ci    {
324514f5e3Sopenharmony_ci        profileTypePool_ = std::make_shared<PGOProfileTypePool>();
334514f5e3Sopenharmony_ci        PGOProfilerHeader::Build(&header_, sizeof(PGOProfilerHeader));
344514f5e3Sopenharmony_ci        header_->SetVersion(version);
354514f5e3Sopenharmony_ci    }
364514f5e3Sopenharmony_ci    ~PGOContextMock() override
374514f5e3Sopenharmony_ci    {
384514f5e3Sopenharmony_ci        delete header_;
394514f5e3Sopenharmony_ci        header_ = nullptr;
404514f5e3Sopenharmony_ci    };
414514f5e3Sopenharmony_ci
424514f5e3Sopenharmony_ci    std::shared_ptr<PGOProfileTypePool> GetProfileTypePool() const override
434514f5e3Sopenharmony_ci    {
444514f5e3Sopenharmony_ci        return profileTypePool_;
454514f5e3Sopenharmony_ci    }
464514f5e3Sopenharmony_ci    uint32_t GetHotnessThreshold() const override
474514f5e3Sopenharmony_ci    {
484514f5e3Sopenharmony_ci        return threshold_;
494514f5e3Sopenharmony_ci    }
504514f5e3Sopenharmony_ci    PGOProfilerHeader *GetHeader() const override
514514f5e3Sopenharmony_ci    {
524514f5e3Sopenharmony_ci        return header_;
534514f5e3Sopenharmony_ci    }
544514f5e3Sopenharmony_ci    bool SupportElementsKind() const override
554514f5e3Sopenharmony_ci    {
564514f5e3Sopenharmony_ci        ASSERT(header_ != nullptr);
574514f5e3Sopenharmony_ci        return header_->SupportElementsKind();
584514f5e3Sopenharmony_ci    }
594514f5e3Sopenharmony_ci
604514f5e3Sopenharmony_ci    bool SupportElementsTrackInfo() const override
614514f5e3Sopenharmony_ci    {
624514f5e3Sopenharmony_ci        ASSERT(header_ != nullptr);
634514f5e3Sopenharmony_ci        return header_->SupportElementsTrackInfo();
644514f5e3Sopenharmony_ci    }
654514f5e3Sopenharmony_ci
664514f5e3Sopenharmony_ci    void ResetAbcIdRemap() const override
674514f5e3Sopenharmony_ci    {
684514f5e3Sopenharmony_ci        abcIdRemap_.clear();
694514f5e3Sopenharmony_ci    }
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_ci    void AddAbcIdRemap(ApEntityId oldId, ApEntityId newId) const override
724514f5e3Sopenharmony_ci    {
734514f5e3Sopenharmony_ci        abcIdRemap_[oldId] = newId;
744514f5e3Sopenharmony_ci    }
754514f5e3Sopenharmony_ci
764514f5e3Sopenharmony_ci    const std::map<ApEntityId, ApEntityId> &GetAbcIdRemap() const override
774514f5e3Sopenharmony_ci    {
784514f5e3Sopenharmony_ci        return abcIdRemap_;
794514f5e3Sopenharmony_ci    }
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ciprivate:
824514f5e3Sopenharmony_ci    NO_COPY_SEMANTIC(PGOContextMock);
834514f5e3Sopenharmony_ci    NO_MOVE_SEMANTIC(PGOContextMock);
844514f5e3Sopenharmony_ci    std::shared_ptr<PGOProfileTypePool> profileTypePool_;
854514f5e3Sopenharmony_ci    PGOProfilerHeader *header_ {};
864514f5e3Sopenharmony_ci    uint32_t threshold_ {};
874514f5e3Sopenharmony_ci    mutable std::map<ApEntityId, ApEntityId> abcIdRemap_;
884514f5e3Sopenharmony_ci};
894514f5e3Sopenharmony_ci} // namespace panda::ecmascript::pgo
904514f5e3Sopenharmony_ci#endif