| Index: cc/test/animation_timelines_test_common.cc
|
| diff --git a/cc/test/animation_timelines_test_common.cc b/cc/test/animation_timelines_test_common.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea9d0b00cd65295a9f537d8370af5b1b8e49bd0a
|
| --- /dev/null
|
| +++ b/cc/test/animation_timelines_test_common.cc
|
| @@ -0,0 +1,256 @@
|
| +// Copyright 2015 The Chromium 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 "cc/test/animation_timelines_test_common.h"
|
| +
|
| +#include "cc/animation/animation_events.h"
|
| +#include "cc/animation/animation_id_provider.h"
|
| +#include "cc/animation/animation_player.h"
|
| +#include "cc/animation/animation_registrar.h"
|
| +#include "cc/animation/animation_timeline.h"
|
| +#include "cc/animation/element_animations.h"
|
| +#include "cc/output/filter_operation.h"
|
| +#include "cc/output/filter_operations.h"
|
| +#include "ui/gfx/transform.h"
|
| +
|
| +namespace cc {
|
| +
|
| +scoped_ptr<TestLayer> TestLayer::Create() {
|
| + return make_scoped_ptr(new TestLayer());
|
| +}
|
| +
|
| +TestLayer::TestLayer() {
|
| + ClearMutatedProperties();
|
| +}
|
| +
|
| +void TestLayer::ClearMutatedProperties() {
|
| + transform_x_ = 0;
|
| + transform_y_ = 0;
|
| +
|
| + opacity_ = 0;
|
| + brightness_ = 0;
|
| +
|
| + for (int i = 0; i <= Animation::LAST_TARGET_PROPERTY; ++i)
|
| + mutated_properties_[i] = false;
|
| +}
|
| +
|
| +TestHostClient::TestHostClient(ThreadInstance thread_instance)
|
| + : host_(AnimationHost::Create(thread_instance)),
|
| + mutators_need_commit_(false) {
|
| + host_->SetMutatorHostClient(this);
|
| +}
|
| +
|
| +TestHostClient::~TestHostClient() {
|
| + host_->SetMutatorHostClient(nullptr);
|
| +}
|
| +
|
| +void TestHostClient::ClearMutatedProperties() {
|
| + for (auto& kv : layers_in_pending_tree_)
|
| + kv.second->ClearMutatedProperties();
|
| + for (auto& kv : layers_in_active_tree_)
|
| + kv.second->ClearMutatedProperties();
|
| +}
|
| +
|
| +bool TestHostClient::IsLayerInTree(int layer_id,
|
| + LayerTreeType tree_type) const {
|
| + return tree_type == LayerTreeType::ACTIVE
|
| + ? layers_in_active_tree_.count(layer_id)
|
| + : layers_in_pending_tree_.count(layer_id);
|
| +}
|
| +
|
| +void TestHostClient::SetMutatorsNeedCommit() {
|
| + mutators_need_commit_ = true;
|
| +}
|
| +
|
| +void TestHostClient::SetLayerFilterMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + const FilterOperations& filters) {
|
| + for (unsigned i = 0; i < filters.size(); ++i) {
|
| + const FilterOperation& filter = filters.at(i);
|
| + if (filter.type() == FilterOperation::BRIGHTNESS) {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + layer->set_brightness(filter.amount());
|
| + }
|
| + }
|
| +}
|
| +
|
| +void TestHostClient::SetLayerOpacityMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + float opacity) {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + layer->set_opacity(opacity);
|
| +}
|
| +
|
| +void TestHostClient::SetLayerTransformMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + const gfx::Transform& transform) {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + gfx::Vector2dF vec = transform.To2dTranslation();
|
| + layer->set_transform(static_cast<int>(vec.x()), static_cast<int>(vec.y()));
|
| +}
|
| +
|
| +void TestHostClient::SetLayerScrollOffsetMutated(
|
| + int layer_id,
|
| + LayerTreeType tree_type,
|
| + const gfx::ScrollOffset& scroll_offset) {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + layer->set_scroll_offset(scroll_offset);
|
| +}
|
| +
|
| +void TestHostClient::RegisterLayer(int layer_id, LayerTreeType tree_type) {
|
| + LayerIdToTestLayer& layers_in_tree = tree_type == LayerTreeType::ACTIVE
|
| + ? layers_in_active_tree_
|
| + : layers_in_pending_tree_;
|
| + DCHECK(layers_in_tree.find(layer_id) == layers_in_tree.end());
|
| + layers_in_tree.add(layer_id, TestLayer::Create());
|
| +
|
| + DCHECK(host_);
|
| + host_->RegisterLayer(layer_id, tree_type);
|
| +}
|
| +
|
| +void TestHostClient::UnregisterLayer(int layer_id, LayerTreeType tree_type) {
|
| + DCHECK(host_);
|
| + host_->UnregisterLayer(layer_id, tree_type);
|
| +
|
| + LayerIdToTestLayer& layers_in_tree = tree_type == LayerTreeType::ACTIVE
|
| + ? layers_in_active_tree_
|
| + : layers_in_pending_tree_;
|
| + auto kv = layers_in_tree.find(layer_id);
|
| + DCHECK(kv != layers_in_tree.end());
|
| + layers_in_tree.erase(kv);
|
| +}
|
| +
|
| +bool TestHostClient::IsPropertyMutated(
|
| + int layer_id,
|
| + LayerTreeType tree_type,
|
| + Animation::TargetProperty property) const {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + return layer->is_property_mutated(property);
|
| +}
|
| +
|
| +void TestHostClient::ExpectFilterPropertyMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + float brightness) const {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + EXPECT_TRUE(layer->is_property_mutated(Animation::OPACITY));
|
| + EXPECT_EQ(brightness, layer->brightness());
|
| +}
|
| +
|
| +void TestHostClient::ExpectOpacityPropertyMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + float opacity) const {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + EXPECT_TRUE(layer->is_property_mutated(Animation::OPACITY));
|
| + EXPECT_EQ(opacity, layer->opacity());
|
| +}
|
| +
|
| +void TestHostClient::ExpectTransformPropertyMutated(int layer_id,
|
| + LayerTreeType tree_type,
|
| + int transform_x,
|
| + int transform_y) const {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + EXPECT_TRUE(layer->is_property_mutated(Animation::OPACITY));
|
| + EXPECT_EQ(transform_x, layer->transform_x());
|
| + EXPECT_EQ(transform_y, layer->transform_y());
|
| +}
|
| +
|
| +void TestHostClient::ExpectScrollOffsetPropertyMutated(
|
| + int layer_id,
|
| + LayerTreeType tree_type,
|
| + const gfx::ScrollOffset& scroll_offset) const {
|
| + TestLayer* layer = FindTestLayer(layer_id, tree_type);
|
| + EXPECT_TRUE(layer->is_property_mutated(Animation::OPACITY));
|
| + EXPECT_EQ(scroll_offset, layer->scroll_offset());
|
| +}
|
| +
|
| +TestLayer* TestHostClient::FindTestLayer(int layer_id,
|
| + LayerTreeType tree_type) const {
|
| + const LayerIdToTestLayer& layers_in_tree = tree_type == LayerTreeType::ACTIVE
|
| + ? layers_in_active_tree_
|
| + : layers_in_pending_tree_;
|
| + auto kv = layers_in_tree.find(layer_id);
|
| + DCHECK(kv != layers_in_tree.end());
|
| + DCHECK(kv->second);
|
| + return kv->second;
|
| +}
|
| +
|
| +TestAnimationDelegate::TestAnimationDelegate()
|
| + : started_(false), finished_(false) {
|
| +}
|
| +
|
| +void TestAnimationDelegate::NotifyAnimationStarted(
|
| + base::TimeTicks monotonic_time,
|
| + Animation::TargetProperty target_property,
|
| + int group) {
|
| + started_ = true;
|
| +}
|
| +void TestAnimationDelegate::NotifyAnimationFinished(
|
| + base::TimeTicks monotonic_time,
|
| + Animation::TargetProperty target_property,
|
| + int group) {
|
| + finished_ = true;
|
| +}
|
| +
|
| +AnimationTimelinesTest::AnimationTimelinesTest()
|
| + : client_(ThreadInstance::MAIN),
|
| + client_impl_(ThreadInstance::IMPL),
|
| + timeline_id_(AnimationIdProvider::NextTimelineId()),
|
| + player_id_(AnimationIdProvider::NextPlayerId()),
|
| + layer_id_(1) {
|
| + host_ = client_.host();
|
| + host_impl_ = client_impl_.host();
|
| +}
|
| +
|
| +AnimationTimelinesTest::~AnimationTimelinesTest() {
|
| +}
|
| +
|
| +void AnimationTimelinesTest::SetUp() {
|
| + timeline_ = AnimationTimeline::Create(timeline_id_);
|
| + player_ = AnimationPlayer::Create(player_id_);
|
| +}
|
| +
|
| +void AnimationTimelinesTest::GetImplTimelineAndPlayerByID() {
|
| + timeline_impl_ = host_impl_->GetTimelineById(timeline_id_);
|
| + EXPECT_TRUE(timeline_impl_);
|
| + player_impl_ = timeline_impl_->GetPlayerById(player_id_);
|
| + EXPECT_TRUE(player_impl_);
|
| +}
|
| +
|
| +void AnimationTimelinesTest::ReleaseRefPtrs() {
|
| + player_ = nullptr;
|
| + timeline_ = nullptr;
|
| + player_impl_ = nullptr;
|
| + timeline_impl_ = nullptr;
|
| +}
|
| +
|
| +void AnimationTimelinesTest::AnimateLayersTransferEvents(
|
| + base::TimeTicks time,
|
| + unsigned expect_events) {
|
| + scoped_ptr<AnimationEventsVector> events =
|
| + host_->animation_registrar()->CreateEvents();
|
| +
|
| + host_impl_->animation_registrar()->AnimateLayers(time);
|
| + host_impl_->animation_registrar()->UpdateAnimationState(true, events.get());
|
| + EXPECT_EQ(expect_events, events->size());
|
| +
|
| + host_->animation_registrar()->AnimateLayers(time);
|
| + host_->animation_registrar()->UpdateAnimationState(true, nullptr);
|
| + host_->animation_registrar()->SetAnimationEvents(events.Pass());
|
| +}
|
| +
|
| +AnimationPlayer* AnimationTimelinesTest::GetPlayerForLayerId(int layer_id) {
|
| + const ElementAnimations* element_animations =
|
| + host_->GetElementAnimationsForLayerId(layer_id);
|
| + return element_animations ? element_animations->players_list().head()->value()
|
| + : nullptr;
|
| +}
|
| +
|
| +AnimationPlayer* AnimationTimelinesTest::GetImplPlayerForLayerId(int layer_id) {
|
| + const ElementAnimations* element_animations =
|
| + host_impl_->GetElementAnimationsForLayerId(layer_id);
|
| + return element_animations ? element_animations->players_list().head()->value()
|
| + : nullptr;
|
| +}
|
| +
|
| +} // namespace cc
|
|
|