14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 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_AOT_COMPILER_STATS_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_AOT_COMPILER_STATS_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include "ecmascript/log.h"
204514f5e3Sopenharmony_ci#include "ecmascript/log_wrapper.h"
214514f5e3Sopenharmony_ci
224514f5e3Sopenharmony_ci#include <ctime>
234514f5e3Sopenharmony_ci#include <chrono>
244514f5e3Sopenharmony_ci#include <string>
254514f5e3Sopenharmony_ci
264514f5e3Sopenharmony_cinamespace panda::ecmascript {
274514f5e3Sopenharmony_ciusing Clock = std::chrono::high_resolution_clock;
284514f5e3Sopenharmony_ciusing Duration = std::chrono::duration<uint64_t, std::nano>;
294514f5e3Sopenharmony_ci
304514f5e3Sopenharmony_ciclass AotCompilerStats {
314514f5e3Sopenharmony_cipublic:
324514f5e3Sopenharmony_ci    AotCompilerStats() {};
334514f5e3Sopenharmony_ci    ~AotCompilerStats() = default;
344514f5e3Sopenharmony_ci
354514f5e3Sopenharmony_ci    void SetBundleName(std::string bundleName)
364514f5e3Sopenharmony_ci    {
374514f5e3Sopenharmony_ci        bundleName_ = bundleName;
384514f5e3Sopenharmony_ci    }
394514f5e3Sopenharmony_ci
404514f5e3Sopenharmony_ci    std::string GetBundleName() const
414514f5e3Sopenharmony_ci    {
424514f5e3Sopenharmony_ci        return bundleName_;
434514f5e3Sopenharmony_ci    }
444514f5e3Sopenharmony_ci
454514f5e3Sopenharmony_ci    void SetPgoPath(std::string pgoFilePath)
464514f5e3Sopenharmony_ci    {
474514f5e3Sopenharmony_ci        pgoFilePath_ = pgoFilePath;
484514f5e3Sopenharmony_ci    }
494514f5e3Sopenharmony_ci
504514f5e3Sopenharmony_ci    std::string GetPgoPath() const
514514f5e3Sopenharmony_ci    {
524514f5e3Sopenharmony_ci        return pgoFilePath_;
534514f5e3Sopenharmony_ci    }
544514f5e3Sopenharmony_ci
554514f5e3Sopenharmony_ci    void SetAotFilePath(std::string aotFilePath)
564514f5e3Sopenharmony_ci    {
574514f5e3Sopenharmony_ci        aotFilePath_ = aotFilePath;
584514f5e3Sopenharmony_ci    }
594514f5e3Sopenharmony_ci
604514f5e3Sopenharmony_ci    std::string GetAotFilePath() const
614514f5e3Sopenharmony_ci    {
624514f5e3Sopenharmony_ci        return aotFilePath_;
634514f5e3Sopenharmony_ci    }
644514f5e3Sopenharmony_ci
654514f5e3Sopenharmony_ci    void StartCompiler()
664514f5e3Sopenharmony_ci    {
674514f5e3Sopenharmony_ci        start_ = Clock::now();
684514f5e3Sopenharmony_ci    }
694514f5e3Sopenharmony_ci
704514f5e3Sopenharmony_ci    void EndCompiler()
714514f5e3Sopenharmony_ci    {
724514f5e3Sopenharmony_ci        end_ = Clock::now();
734514f5e3Sopenharmony_ci    }
744514f5e3Sopenharmony_ci
754514f5e3Sopenharmony_ci    float GetTotalTime() const
764514f5e3Sopenharmony_ci    {
774514f5e3Sopenharmony_ci        auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end_ - start_);
784514f5e3Sopenharmony_ci        return (float) duration.count() / SECOND_TIME;
794514f5e3Sopenharmony_ci    }
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ci    void SetIsLiteCg(bool litecg)
824514f5e3Sopenharmony_ci    {
834514f5e3Sopenharmony_ci        isLiteCg_ = litecg;
844514f5e3Sopenharmony_ci    }
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci    bool IsLiteCg() const
874514f5e3Sopenharmony_ci    {
884514f5e3Sopenharmony_ci        return isLiteCg_;
894514f5e3Sopenharmony_ci    }
904514f5e3Sopenharmony_ci
914514f5e3Sopenharmony_ci    void SetCompilerMethodCount(uint32_t count)
924514f5e3Sopenharmony_ci    {
934514f5e3Sopenharmony_ci        compilerMethodCount_ += count;
944514f5e3Sopenharmony_ci    }
954514f5e3Sopenharmony_ci
964514f5e3Sopenharmony_ci    uint32_t GetCompilerMethodCount() const
974514f5e3Sopenharmony_ci    {
984514f5e3Sopenharmony_ci        return compilerMethodCount_;
994514f5e3Sopenharmony_ci    }
1004514f5e3Sopenharmony_ci
1014514f5e3Sopenharmony_ci    void SetPgoFileLegal(bool legal)
1024514f5e3Sopenharmony_ci    {
1034514f5e3Sopenharmony_ci        pgoFileLegal_ = legal;
1044514f5e3Sopenharmony_ci    }
1054514f5e3Sopenharmony_ci
1064514f5e3Sopenharmony_ci    bool GetPgoFileLegal() const
1074514f5e3Sopenharmony_ci    {
1084514f5e3Sopenharmony_ci        return pgoFileLegal_;
1094514f5e3Sopenharmony_ci    }
1104514f5e3Sopenharmony_ci
1114514f5e3Sopenharmony_ci    void PrintCompilerStatsLog();
1124514f5e3Sopenharmony_ci
1134514f5e3Sopenharmony_ciprivate:
1144514f5e3Sopenharmony_ci    void SendSysEvent() const;
1154514f5e3Sopenharmony_ci    bool IsLongTimeCompiler() const
1164514f5e3Sopenharmony_ci    {
1174514f5e3Sopenharmony_ci        return GetTotalTime() > longTime_;
1184514f5e3Sopenharmony_ci    }
1194514f5e3Sopenharmony_ci
1204514f5e3Sopenharmony_ci    std::string bundleName_ = "";
1214514f5e3Sopenharmony_ci    std::string pgoFilePath_ = "";
1224514f5e3Sopenharmony_ci    std::string aotFilePath_ = "";
1234514f5e3Sopenharmony_ci    Clock::time_point start_;
1244514f5e3Sopenharmony_ci    Clock::time_point end_;
1254514f5e3Sopenharmony_ci    bool isLiteCg_ = false;
1264514f5e3Sopenharmony_ci    uint32_t compilerMethodCount_ = 0;
1274514f5e3Sopenharmony_ci    bool pgoFileLegal_ = true;
1284514f5e3Sopenharmony_ci    float longTime_ = 120;
1294514f5e3Sopenharmony_ci    static constexpr uint32_t SECOND_TIME = 1000000;
1304514f5e3Sopenharmony_ci};
1314514f5e3Sopenharmony_ci}
1324514f5e3Sopenharmony_ci
1334514f5e3Sopenharmony_ci#endif // ECMASCRIPT_AOT_COMPILER_STATS_H