|  | // Copyright 2013 The Flutter Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "flutter/flow/stopwatch.h" | 
|  | #include "fml/time/time_delta.h" | 
|  | #include "gmock/gmock.h"  // IWYU pragma: keep | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | using testing::Return; | 
|  |  | 
|  | namespace flutter { | 
|  | namespace testing { | 
|  |  | 
|  | class FakeRefreshRateUpdater : public Stopwatch::RefreshRateUpdater { | 
|  | public: | 
|  | fml::Milliseconds GetFrameBudget() const override { return budget_; } | 
|  |  | 
|  | void SetFrameBudget(fml::Milliseconds budget) { budget_ = budget; } | 
|  |  | 
|  | private: | 
|  | fml::Milliseconds budget_; | 
|  | }; | 
|  |  | 
|  | TEST(Instrumentation, GetDefaultFrameBudgetTest) { | 
|  | fml::Milliseconds frame_budget_60fps = fml::RefreshRateToFrameBudget(60); | 
|  | // The default constructor sets the frame_budget to 16.6667 (60 fps). | 
|  | FixedRefreshRateStopwatch stopwatch; | 
|  | fml::Milliseconds actual_frame_budget = stopwatch.GetFrameBudget(); | 
|  | EXPECT_EQ(frame_budget_60fps, actual_frame_budget); | 
|  | } | 
|  |  | 
|  | TEST(Instrumentation, GetOneShotFrameBudgetTest) { | 
|  | fml::Milliseconds frame_budget_90fps = fml::RefreshRateToFrameBudget(90); | 
|  | FixedRefreshRateStopwatch stopwatch(frame_budget_90fps); | 
|  | fml::Milliseconds actual_frame_budget = stopwatch.GetFrameBudget(); | 
|  | EXPECT_EQ(frame_budget_90fps, actual_frame_budget); | 
|  | } | 
|  |  | 
|  | TEST(Instrumentation, GetFrameBudgetFromUpdaterTest) { | 
|  | FakeRefreshRateUpdater updater; | 
|  | fml::Milliseconds frame_budget_90fps = fml::RefreshRateToFrameBudget(90); | 
|  | updater.SetFrameBudget(frame_budget_90fps); | 
|  |  | 
|  | Stopwatch stopwatch(updater); | 
|  | fml::Milliseconds actual_frame_budget = stopwatch.GetFrameBudget(); | 
|  | EXPECT_EQ(frame_budget_90fps, actual_frame_budget); | 
|  | } | 
|  |  | 
|  | TEST(Instrumentation, GetLapByIndexTest) { | 
|  | fml::Milliseconds frame_budget_90fps = fml::RefreshRateToFrameBudget(90); | 
|  | FixedRefreshRateStopwatch stopwatch(frame_budget_90fps); | 
|  | stopwatch.SetLapTime(fml::TimeDelta::FromMilliseconds(10)); | 
|  | EXPECT_EQ(stopwatch.GetLap(1), fml::TimeDelta::FromMilliseconds(10)); | 
|  | } | 
|  |  | 
|  | TEST(Instrumentation, GetCurrentSampleTest) { | 
|  | fml::Milliseconds frame_budget_90fps = fml::RefreshRateToFrameBudget(90); | 
|  | FixedRefreshRateStopwatch stopwatch(frame_budget_90fps); | 
|  | stopwatch.Start(); | 
|  | stopwatch.Stop(); | 
|  | EXPECT_EQ(stopwatch.GetCurrentSample(), size_t(1)); | 
|  | } | 
|  |  | 
|  | TEST(Instrumentation, GetLapsCount) { | 
|  | fml::Milliseconds frame_budget_90fps = fml::RefreshRateToFrameBudget(90); | 
|  | FixedRefreshRateStopwatch stopwatch(frame_budget_90fps); | 
|  | stopwatch.SetLapTime(fml::TimeDelta::FromMilliseconds(10)); | 
|  | EXPECT_EQ(stopwatch.GetLapsCount(), size_t(120)); | 
|  | } | 
|  |  | 
|  | }  // namespace testing | 
|  | }  // namespace flutter |