scrollbar_animation_controller_thinning_unittest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cc/animation/scrollbar_animation_controller_thinning.h" 6 7#include "cc/layers/solid_color_scrollbar_layer_impl.h" 8#include "cc/test/fake_impl_proxy.h" 9#include "cc/test/fake_layer_tree_host_impl.h" 10#include "testing/gtest/include/gtest/gtest.h" 11 12namespace cc { 13namespace { 14 15class ScrollbarAnimationControllerThinningTest : public testing::Test { 16 public: 17 ScrollbarAnimationControllerThinningTest() : host_impl_(&proxy_) {} 18 19 protected: 20 virtual void SetUp() { 21 scroll_layer_ = LayerImpl::Create(host_impl_.active_tree(), 1); 22 const int kId = 2; 23 const int kThumbThickness = 10; 24 const bool kIsLeftSideVerticalScrollbar = false; 25 scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create( 26 host_impl_.active_tree(), kId, HORIZONTAL, kThumbThickness, 27 kIsLeftSideVerticalScrollbar); 28 29 scroll_layer_->SetMaxScrollOffset(gfx::Vector2d(50, 50)); 30 scroll_layer_->SetBounds(gfx::Size(50, 50)); 31 scroll_layer_->SetHorizontalScrollbarLayer(scrollbar_layer_.get()); 32 33 scrollbar_controller_ = ScrollbarAnimationControllerThinning::CreateForTest( 34 scroll_layer_.get(), 35 base::TimeDelta::FromSeconds(2), 36 base::TimeDelta::FromSeconds(3)); 37 } 38 39 FakeImplProxy proxy_; 40 FakeLayerTreeHostImpl host_impl_; 41 scoped_ptr<ScrollbarAnimationControllerThinning> scrollbar_controller_; 42 scoped_ptr<LayerImpl> scroll_layer_; 43 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar_layer_; 44}; 45 46TEST_F(ScrollbarAnimationControllerThinningTest, Idle) { 47 scrollbar_controller_->Animate(base::TimeTicks()); 48 EXPECT_FLOAT_EQ(0.7f, scrollbar_layer_->opacity()); 49 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); 50} 51 52TEST_F(ScrollbarAnimationControllerThinningTest, AwakenByScrollGesture) { 53 base::TimeTicks time; 54 time += base::TimeDelta::FromSeconds(1); 55 scrollbar_controller_->DidScrollGestureBegin(); 56 EXPECT_FALSE(scrollbar_controller_->IsAnimating()); 57 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 58 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 59 60 time += base::TimeDelta::FromSeconds(100); 61 scrollbar_controller_->Animate(time); 62 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 63 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 64 scrollbar_controller_->DidScrollGestureEnd(time); 65 66 EXPECT_TRUE(scrollbar_controller_->IsAnimating()); 67 EXPECT_EQ(2, scrollbar_controller_->DelayBeforeStart(time).InSeconds()); 68 69 time += base::TimeDelta::FromSeconds(1); 70 scrollbar_controller_->Animate(time); 71 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 72 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 73 74 time += base::TimeDelta::FromSeconds(1); 75 scrollbar_controller_->Animate(time); 76 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 77 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 78 79 time += base::TimeDelta::FromSeconds(1); 80 scrollbar_controller_->Animate(time); 81 EXPECT_FLOAT_EQ(0.9f, scrollbar_layer_->opacity()); 82 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->thumb_thickness_scale_factor()); 83 84 time += base::TimeDelta::FromSeconds(1); 85 scrollbar_controller_->Animate(time); 86 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 87 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 88 89 time += base::TimeDelta::FromSeconds(1); 90 91 scrollbar_controller_->DidScrollGestureBegin(); 92 scrollbar_controller_->DidScrollGestureEnd(time); 93 94 time += base::TimeDelta::FromSeconds(1); 95 scrollbar_controller_->Animate(time); 96 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 97 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 98 99 time += base::TimeDelta::FromSeconds(1); 100 scrollbar_controller_->Animate(time); 101 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 102 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 103 104 time += base::TimeDelta::FromSeconds(1); 105 scrollbar_controller_->Animate(time); 106 EXPECT_FLOAT_EQ(0.9f, scrollbar_layer_->opacity()); 107 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->thumb_thickness_scale_factor()); 108 109 time += base::TimeDelta::FromSeconds(1); 110 scrollbar_controller_->Animate(time); 111 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 112 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 113 114 time += base::TimeDelta::FromSeconds(1); 115 scrollbar_controller_->Animate(time); 116 EXPECT_FLOAT_EQ(0.7f, scrollbar_layer_->opacity()); 117 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); 118} 119 120TEST_F(ScrollbarAnimationControllerThinningTest, AwakenByProgrammaticScroll) { 121 base::TimeTicks time; 122 time += base::TimeDelta::FromSeconds(1); 123 EXPECT_TRUE(scrollbar_controller_->DidScrollUpdate(time)); 124 EXPECT_TRUE(scrollbar_controller_->IsAnimating()); 125 EXPECT_EQ(2, scrollbar_controller_->DelayBeforeStart(time).InSeconds()); 126 scrollbar_controller_->Animate(time); 127 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 128 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 129 130 time += base::TimeDelta::FromSeconds(1); 131 scrollbar_controller_->Animate(time); 132 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 133 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 134 EXPECT_TRUE(scrollbar_controller_->DidScrollUpdate(time)); 135 136 time += base::TimeDelta::FromSeconds(1); 137 scrollbar_controller_->Animate(time); 138 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 139 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 140 141 time += base::TimeDelta::FromSeconds(1); 142 scrollbar_controller_->Animate(time); 143 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 144 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 145 146 time += base::TimeDelta::FromSeconds(1); 147 scrollbar_controller_->Animate(time); 148 EXPECT_FLOAT_EQ(0.9f, scrollbar_layer_->opacity()); 149 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->thumb_thickness_scale_factor()); 150 151 time += base::TimeDelta::FromSeconds(1); 152 scrollbar_controller_->Animate(time); 153 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 154 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 155 156 time += base::TimeDelta::FromSeconds(1); 157 EXPECT_TRUE(scrollbar_controller_->DidScrollUpdate(time)); 158 time += base::TimeDelta::FromSeconds(1); 159 scrollbar_controller_->Animate(time); 160 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 161 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 162 163 time += base::TimeDelta::FromSeconds(1); 164 scrollbar_controller_->Animate(time); 165 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 166 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 167 168 time += base::TimeDelta::FromSeconds(1); 169 scrollbar_controller_->Animate(time); 170 EXPECT_FLOAT_EQ(0.9f, scrollbar_layer_->opacity()); 171 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->thumb_thickness_scale_factor()); 172 173 time += base::TimeDelta::FromSeconds(1); 174 scrollbar_controller_->Animate(time); 175 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 176 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 177 178 time += base::TimeDelta::FromSeconds(1); 179 scrollbar_controller_->Animate(time); 180 EXPECT_FLOAT_EQ(0.7f, scrollbar_layer_->opacity()); 181 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); 182} 183 184TEST_F(ScrollbarAnimationControllerThinningTest, MouseOverAndOut) { 185 base::TimeTicks time; 186 time += base::TimeDelta::FromSeconds(1); 187 EXPECT_TRUE(scrollbar_controller_->DidScrollUpdate(time)); 188 EXPECT_TRUE(scrollbar_controller_->IsAnimating()); 189 EXPECT_EQ(2, scrollbar_controller_->DelayBeforeStart(time).InSeconds()); 190 scrollbar_controller_->Animate(time); 191 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 192 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 193 194 time += base::TimeDelta::FromSeconds(4); 195 scrollbar_controller_->Animate(time); 196 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 197 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 198 199 scrollbar_controller_->DidMouseMoveNear(time, 0); 200 scrollbar_controller_->Animate(time); 201 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 202 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 203 204 time += base::TimeDelta::FromSeconds(4); 205 scrollbar_controller_->Animate(time); 206 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 207 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 208 209 scrollbar_controller_->DidMouseMoveOffScrollbar(time); 210 scrollbar_controller_->Animate(time); 211 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->opacity()); 212 EXPECT_FLOAT_EQ(1.0f, scrollbar_layer_->thumb_thickness_scale_factor()); 213 214 time += base::TimeDelta::FromSeconds(4); 215 scrollbar_controller_->Animate(time); 216 EXPECT_FLOAT_EQ(0.8f, scrollbar_layer_->opacity()); 217 EXPECT_FLOAT_EQ(0.6f, scrollbar_layer_->thumb_thickness_scale_factor()); 218 219 time += base::TimeDelta::FromSeconds(1); 220 scrollbar_controller_->Animate(time); 221 EXPECT_FLOAT_EQ(0.7f, scrollbar_layer_->opacity()); 222 EXPECT_FLOAT_EQ(0.4f, scrollbar_layer_->thumb_thickness_scale_factor()); 223} 224 225} // namespace 226} // namespace cc 227