forked from mindspore-Ecosystem/mindspore
93 lines
2.3 KiB
C++
93 lines
2.3 KiB
C++
/**
|
|
* 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 <iostream>
|
|
#include <string>
|
|
#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<std::string, TimeStat> 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
|