| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/scheduler/renderer/user_model.h" | 5 #include "components/scheduler/renderer/user_model.h" |
| 6 | 6 |
| 7 #include "base/metrics/field_trial.h" |
| 8 #include "base/metrics/user_metrics.h" |
| 9 #include "base/metrics/user_metrics_action.h" |
| 7 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
| 11 #include "base/test/test_simple_task_runner.h" |
| 12 #include "base/test/user_action_tester.h" |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 15 |
| 11 namespace scheduler { | 16 namespace scheduler { |
| 12 | 17 |
| 13 class UserModelTest : public testing::Test { | 18 class UserModelTest : public testing::Test { |
| 14 public: | 19 public: |
| 15 UserModelTest() {} | 20 UserModelTest() {} |
| 16 ~UserModelTest() override {} | 21 ~UserModelTest() override {} |
| 17 | 22 |
| 18 void SetUp() override { | 23 void SetUp() override { |
| 24 mock_task_runner_ = new base::TestSimpleTaskRunner(); |
| 25 |
| 19 clock_.reset(new base::SimpleTestTickClock()); | 26 clock_.reset(new base::SimpleTestTickClock()); |
| 20 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); | 27 clock_->Advance(base::TimeDelta::FromMicroseconds(5000)); |
| 21 | 28 |
| 22 user_model_.reset(new UserModel()); | 29 user_model_.reset(new UserModel(mock_task_runner_)); |
| 30 |
| 31 // Register a mock user action callback for testing. |
| 32 user_action_tester_.reset(new base::UserActionTester()); |
| 23 } | 33 } |
| 24 | 34 |
| 25 protected: | 35 protected: |
| 26 static base::TimeDelta priority_escalation_after_input_duration() { | 36 static base::TimeDelta priority_escalation_after_input_duration() { |
| 27 return base::TimeDelta::FromMilliseconds( | 37 return base::TimeDelta::FromMilliseconds( |
| 28 UserModel::kGestureEstimationLimitMillis); | 38 UserModel::kGestureEstimationLimitMillis); |
| 29 } | 39 } |
| 30 | 40 |
| 31 static base::TimeDelta subsequent_input_expected_after_input_duration() { | 41 static base::TimeDelta subsequent_input_expected_after_input_duration() { |
| 32 return base::TimeDelta::FromMilliseconds( | 42 return base::TimeDelta::FromMilliseconds( |
| 33 UserModel::kExpectSubsequentGestureMillis); | 43 UserModel::kExpectSubsequentGestureMillis); |
| 34 } | 44 } |
| 35 | 45 |
| 36 scoped_ptr<base::SimpleTestTickClock> clock_; | 46 scoped_ptr<base::SimpleTestTickClock> clock_; |
| 37 scoped_ptr<UserModel> user_model_; | 47 scoped_ptr<UserModel> user_model_; |
| 48 scoped_refptr<base::TestSimpleTaskRunner> mock_task_runner_; |
| 49 |
| 50 // Tracks user actions that were recorded. |
| 51 scoped_ptr<base::UserActionTester> user_action_tester_; |
| 38 }; | 52 }; |
| 39 | 53 |
| 40 TEST_F(UserModelTest, TimeLeftInUserGesture_NoInput) { | 54 TEST_F(UserModelTest, TimeLeftInUserGesture_NoInput) { |
| 41 EXPECT_EQ(base::TimeDelta(), | 55 EXPECT_EQ(base::TimeDelta(), |
| 42 user_model_->TimeLeftInUserGesture(clock_->NowTicks())); | 56 user_model_->TimeLeftInUserGesture(clock_->NowTicks())); |
| 43 } | 57 } |
| 44 | 58 |
| 45 TEST_F(UserModelTest, TimeLeftInUserGesture_ImmediatelyAfterInput) { | 59 TEST_F(UserModelTest, TimeLeftInUserGesture_ImmediatelyAfterInput) { |
| 46 user_model_->DidStartProcessingInputEvent( | 60 user_model_->DidStartProcessingInputEvent( |
| 47 blink::WebInputEvent::Type::TouchStart, clock_->NowTicks()); | 61 blink::WebInputEvent::Type::TouchStart, clock_->NowTicks()); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 base::TimeDelta delta(base::TimeDelta::FromMilliseconds( | 258 base::TimeDelta delta(base::TimeDelta::FromMilliseconds( |
| 245 UserModel::kMedianGestureDurationMillis * 2)); | 259 UserModel::kMedianGestureDurationMillis * 2)); |
| 246 clock_->Advance(delta); | 260 clock_->Advance(delta); |
| 247 | 261 |
| 248 base::TimeDelta prediction_valid_duration; | 262 base::TimeDelta prediction_valid_duration; |
| 249 EXPECT_FALSE(user_model_->IsGestureExpectedToContinue( | 263 EXPECT_FALSE(user_model_->IsGestureExpectedToContinue( |
| 250 clock_->NowTicks(), &prediction_valid_duration)); | 264 clock_->NowTicks(), &prediction_valid_duration)); |
| 251 EXPECT_EQ(base::TimeDelta(), prediction_valid_duration); | 265 EXPECT_EQ(base::TimeDelta(), prediction_valid_duration); |
| 252 } | 266 } |
| 253 | 267 |
| 268 TEST_F(UserModelTest, AreActionsLogged) { |
| 269 // Add the action logging feature. |
| 270 base::FeatureList::ClearInstanceForTesting(); |
| 271 scoped_ptr<base::FeatureList> feature_list(new base::FeatureList); |
| 272 feature_list->InitializeFromCommandLine( |
| 273 features::kRecordSchedulerGestureActions.name, std::string()); |
| 274 base::FeatureList::SetInstance(std::move(feature_list)); |
| 275 |
| 276 EXPECT_EQ(0, user_action_tester_->GetActionCount( |
| 277 "RendererScheduler.UserModel.GestureStart")); |
| 278 EXPECT_EQ(0, user_action_tester_->GetActionCount( |
| 279 "RendererScheduler.UserModel.GestureEnd")); |
| 280 |
| 281 user_model_->DidStartProcessingInputEvent( |
| 282 blink::WebInputEvent::Type::GestureScrollBegin, clock_->NowTicks()); |
| 283 mock_task_runner_->RunPendingTasks(); |
| 284 |
| 285 EXPECT_EQ(1, user_action_tester_->GetActionCount( |
| 286 "RendererScheduler.UserModel.GestureStart")); |
| 287 EXPECT_EQ(0, user_action_tester_->GetActionCount( |
| 288 "RendererScheduler.UserModel.GestureEnd")); |
| 289 |
| 290 base::TimeDelta delta(base::TimeDelta::FromMilliseconds(500)); |
| 291 clock_->Advance(delta); |
| 292 |
| 293 user_model_->DidStartProcessingInputEvent( |
| 294 blink::WebInputEvent::Type::GestureScrollEnd, clock_->NowTicks()); |
| 295 mock_task_runner_->RunPendingTasks(); |
| 296 |
| 297 EXPECT_EQ(1, user_action_tester_->GetActionCount( |
| 298 "RendererScheduler.UserModel.GestureStart")); |
| 299 EXPECT_EQ(1, user_action_tester_->GetActionCount( |
| 300 "RendererScheduler.UserModel.GestureEnd")); |
| 301 } |
| 302 |
| 254 } // namespace scheduler | 303 } // namespace scheduler |
| OLD | NEW |