Skip to content

Commit

Permalink
Fabric: Using proper clock in MountingTelemetryTest
Browse files Browse the repository at this point in the history
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
  • Loading branch information
shergin authored and facebook-github-bot committed Apr 20, 2020
1 parent 7757ad0 commit 5dc6ede
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions ReactCommon/fabric/mounting/tests/MountingTelemetryTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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(
Expand All @@ -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);
}
Expand Down

0 comments on commit 5dc6ede

Please sign in to comment.