| Index: components/scheduler/renderer/user_model_unittest.cc
|
| diff --git a/components/scheduler/renderer/user_model_unittest.cc b/components/scheduler/renderer/user_model_unittest.cc
|
| index ebf3ff345c7bbbc282029049de09f4e450d548be..277c0ae6f06b14cfae0f41e9088ea727974a0824 100644
|
| --- a/components/scheduler/renderer/user_model_unittest.cc
|
| +++ b/components/scheduler/renderer/user_model_unittest.cc
|
| @@ -4,7 +4,11 @@
|
|
|
| #include "components/scheduler/renderer/user_model.h"
|
|
|
| +#include "base/metrics/field_trial.h"
|
| +#include "base/metrics/user_metrics.h"
|
| +#include "base/metrics/user_metrics_action.h"
|
| #include "base/test/simple_test_tick_clock.h"
|
| +#include "base/test/test_simple_task_runner.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -12,14 +16,22 @@ namespace scheduler {
|
|
|
| class UserModelTest : public testing::Test {
|
| public:
|
| - UserModelTest() {}
|
| - ~UserModelTest() override {}
|
| + UserModelTest() : mock_task_runner_(new base::TestSimpleTaskRunner()) {}
|
| + ~UserModelTest() override { base::RemoveActionCallback(action_callback_); }
|
|
|
| void SetUp() override {
|
| clock_.reset(new base::SimpleTestTickClock());
|
| clock_->Advance(base::TimeDelta::FromMicroseconds(5000));
|
|
|
| - user_model_.reset(new UserModel());
|
| + user_model_.reset(new UserModel(mock_task_runner_));
|
| +
|
| + // Register a mock user action callback for testing.
|
| + numActionsRecorded_ = 0;
|
| + lastActionRecorded_ = "";
|
| + base::RemoveActionCallback(action_callback_);
|
| + action_callback_ = base::Bind(&UserModelTest::RecordComputedAction,
|
| + base::Unretained(this));
|
| + base::AddActionCallback(action_callback_);
|
| }
|
|
|
| protected:
|
| @@ -33,8 +45,19 @@ class UserModelTest : public testing::Test {
|
| UserModel::kExpectSubsequentGestureMillis);
|
| }
|
|
|
| + void RecordComputedAction(const std::string& action) {
|
| + numActionsRecorded_++;
|
| + lastActionRecorded_ = action;
|
| + }
|
| +
|
| scoped_ptr<base::SimpleTestTickClock> clock_;
|
| scoped_ptr<UserModel> user_model_;
|
| + scoped_refptr<base::TestSimpleTaskRunner> mock_task_runner_;
|
| + base::ActionCallback action_callback_;
|
| +
|
| + // Tracks user actions that were recorded.
|
| + int numActionsRecorded_;
|
| + std::string lastActionRecorded_;
|
| };
|
|
|
| TEST_F(UserModelTest, TimeLeftInUserGesture_NoInput) {
|
| @@ -237,18 +260,32 @@ TEST_F(UserModelTest, IsGestureExpectedToContinue_ShortlyAfterGestureStarted) {
|
| prediction_valid_duration);
|
| }
|
|
|
| -TEST_F(UserModelTest, IsGestureExpectedToContinue_LongAfterGestureStarted) {
|
| +TEST_F(UserModelTest, AreActionsLogged) {
|
| + // Add the action logging feature.
|
| + base::FeatureList::ClearInstanceForTesting();
|
| + scoped_ptr<base::FeatureList> feature_list(new base::FeatureList);
|
| + feature_list->InitializeFromCommandLine(features::kRecordGestureAction.name,
|
| + "");
|
| + base::FeatureList::SetInstance(std::move(feature_list));
|
| +
|
| + EXPECT_EQ(0, numActionsRecorded_);
|
| +
|
| user_model_->DidStartProcessingInputEvent(
|
| blink::WebInputEvent::Type::GestureScrollBegin, clock_->NowTicks());
|
| + mock_task_runner_->RunPendingTasks();
|
|
|
| - base::TimeDelta delta(base::TimeDelta::FromMilliseconds(
|
| - UserModel::kMedianGestureDurationMillis * 2));
|
| + EXPECT_EQ(1, numActionsRecorded_);
|
| + EXPECT_EQ("RendererScheduler.UserModel.GestureStart", lastActionRecorded_);
|
| +
|
| + base::TimeDelta delta(base::TimeDelta::FromMilliseconds(500));
|
| clock_->Advance(delta);
|
|
|
| - base::TimeDelta prediction_valid_duration;
|
| - EXPECT_FALSE(user_model_->IsGestureExpectedToContinue(
|
| - clock_->NowTicks(), &prediction_valid_duration));
|
| - EXPECT_EQ(base::TimeDelta(), prediction_valid_duration);
|
| + user_model_->DidStartProcessingInputEvent(
|
| + blink::WebInputEvent::Type::GestureScrollEnd, clock_->NowTicks());
|
| + mock_task_runner_->RunPendingTasks();
|
| +
|
| + EXPECT_EQ(2, numActionsRecorded_);
|
| + EXPECT_EQ("RendererScheduler.UserModel.GestureEnd", lastActionRecorded_);
|
| }
|
|
|
| } // namespace scheduler
|
|
|