/** * Copyright 2020 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include "common/common_test.h" #ifndef ENABLE_PROFILE #define ENABLE_PROFILE #endif #include "utils/profile.h" namespace mindspore { class TestProfile : public UT::Common { public: TestProfile() {} virtual ~TestProfile() {} virtual void TearDown() {} }; static void test_lap(Profile* prof) { int nums[] = {30, 20, 70}; int cnt = 0; for (auto elem : nums) { WITH(prof->Lap(cnt))[elem]()->void { usleep(elem); }; cnt += 1; } } TEST_F(TestProfile, Test01) { int step_cnt = 0; Profile prof; Profile* ptr_prof = &prof; DumpTime::GetInstance().Record("Test01", GetTime(), true); WITH(ptr_prof)[&ptr_prof, &step_cnt]()->void { WITH(ptr_prof->Step("Step01"))[&step_cnt]()->void { usleep(20); step_cnt += 1; }; WITH(ptr_prof->Step("Step02"))[&ptr_prof, &step_cnt]()->void { usleep(10); test_lap(ptr_prof); step_cnt += 1; }; }; DumpTime::GetInstance().Record("Test01", GetTime(), false); prof.Print(); EXPECT_EQ(step_cnt, 2); } TEST_F(TestProfile, Test02) { std::map stat; double t1 = GetTime(); usleep(20); // Step01.stage1 double t2 = GetTime(); usleep(30); // Step01.stage2 double t3 = GetTime(); usleep(10); // Step02.stage1 double t4 = GetTime(); usleep(10); // Step02.stage2 double t5 = GetTime(); usleep(10); // Step02.stage3 double t6 = GetTime(); MsProfile::StatTime("Step01.stage1", t2 - t1); MsProfile::StatTime("Step01.stage2", t3 - t2); MsProfile::StatTime("Step02.stage1", t4 - t3); MsProfile::StatTime("Step02.stage2", t5 - t4); MsProfile::StatTime("Step02.stage3", t6 - t5); MsProfile::Print(); MsProfile::Reset(); EXPECT_GT(t6 - t1, 0); } } // namespace mindspore