Fabric: Using proper clock in MountingTelemetryTest

Summary:
Apparently, `std::this_thread::sleep_for` uses a different clock to measure time which causes ofter misalignment with the clock which Telemery uses which makes the test flaky. Using the same clock should fix it.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: JoshuaGross

Differential Revision: D21116058

fbshipit-source-id: 52dde2e325776d365431a2a957dcc12dfe53f890
This commit is contained in:
Valentin Shergin
2020-04-19 22:50:34 -07:00
committed by Facebook GitHub Bot
parent 7757ad0576
commit 5dc6eded1b
@@ -18,11 +18,19 @@ using namespace facebook::react;
#define EXPECT_EQ_WITH_THRESHOLD(a, b, threshold) \
EXPECT_TRUE((a >= b - threshold) && (a <= b + threshold))
template <typename ClockT>
void sleep(double durationInSeconds) {
auto timepoint = ClockT::now() +
std::chrono::milliseconds((long long)(durationInSeconds * 1000));
while (ClockT::now() < timepoint) {
}
}
TEST(MountingTelemetryTest, timepoints) {
auto threshold = int64_t{100};
auto threshold = int64_t{10};
auto timepointA = telemetryTimePointNow();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
sleep<TelemetryClock>(0.1);
auto timepointB = telemetryTimePointNow();
auto duration = telemetryDurationToMilliseconds(timepointB - timepointA);
@@ -31,21 +39,21 @@ TEST(MountingTelemetryTest, timepoints) {
}
TEST(MountingTelemetryTest, normalUseCase) {
auto threshold = int64_t{100};
auto threshold = int64_t{10};
auto telemetry = MountingTelemetry{};
telemetry.willCommit();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
sleep<TelemetryClock>(0.1);
telemetry.willLayout();
std::this_thread::sleep_for(std::chrono::milliseconds(200));
sleep<TelemetryClock>(0.2);
telemetry.didLayout();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
sleep<TelemetryClock>(0.1);
telemetry.didCommit();
std::this_thread::sleep_for(std::chrono::milliseconds(300));
sleep<TelemetryClock>(0.3);
telemetry.willMount();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
sleep<TelemetryClock>(0.1);
telemetry.didMount();
auto commitDuration = telemetryDurationToMilliseconds(
@@ -55,7 +63,7 @@ TEST(MountingTelemetryTest, normalUseCase) {
auto mountDuration = telemetryDurationToMilliseconds(
telemetry.getMountEndTime() - telemetry.getMountStartTime());
EXPECT_EQ_WITH_THRESHOLD(commitDuration, 400, threshold * 2);
EXPECT_EQ_WITH_THRESHOLD(commitDuration, 400, threshold);
EXPECT_EQ_WITH_THRESHOLD(layoutDuration, 200, threshold);
EXPECT_EQ_WITH_THRESHOLD(mountDuration, 100, threshold);
}