blob: ebf129b8ec900c873e5ad336b9e7b64b0d161129 [file] [log] [blame]
// 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.
#define FML_USED_ON_EMBEDDER
#include <functional>
#include <future>
#include <memory>
#include "flutter/shell/common/layer_tree_holder.h"
#include "gtest/gtest.h"
namespace flutter {
namespace testing {
TEST(LayerTreeHolder, EmptyOnInit) {
const LayerTreeHolder layer_tree_holder;
ASSERT_TRUE(layer_tree_holder.IsEmpty());
}
TEST(LayerTreeHolder, PutOneAndGet) {
LayerTreeHolder layer_tree_holder;
const auto frame_size = SkISize::Make(64, 64);
auto layer_tree = std::make_unique<LayerTree>(frame_size, 100.0f, 1.0f);
layer_tree_holder.PushIfNewer(std::move(layer_tree));
ASSERT_FALSE(layer_tree_holder.IsEmpty());
const auto stored = layer_tree_holder.Pop();
ASSERT_EQ(stored->frame_size(), frame_size);
ASSERT_TRUE(layer_tree_holder.IsEmpty());
}
TEST(LayerTreeHolder, PutMultiGetsLatest) {
const auto build_begin = fml::TimePoint::Now();
const auto target_time_1 = build_begin + fml::TimeDelta::FromSeconds(2);
const auto target_time_2 = build_begin + fml::TimeDelta::FromSeconds(5);
LayerTreeHolder layer_tree_holder;
const auto frame_size_1 = SkISize::Make(64, 64);
auto layer_tree_1 = std::make_unique<LayerTree>(frame_size_1, 100.0f, 1.0f);
layer_tree_1->RecordBuildTime(build_begin, target_time_1);
layer_tree_holder.PushIfNewer(std::move(layer_tree_1));
const auto frame_size_2 = SkISize::Make(128, 128);
auto layer_tree_2 = std::make_unique<LayerTree>(frame_size_2, 100.0f, 1.0f);
layer_tree_2->RecordBuildTime(build_begin, target_time_2);
layer_tree_holder.PushIfNewer(std::move(layer_tree_2));
const auto stored = layer_tree_holder.Pop();
ASSERT_EQ(stored->frame_size(), frame_size_2);
ASSERT_TRUE(layer_tree_holder.IsEmpty());
}
TEST(LayerTreeHolder, RetainsOlderIfNewerFrameHasEarlierTargetTime) {
const auto build_begin = fml::TimePoint::Now();
const auto target_time_1 = build_begin + fml::TimeDelta::FromSeconds(5);
const auto target_time_2 = build_begin + fml::TimeDelta::FromSeconds(2);
LayerTreeHolder layer_tree_holder;
const auto frame_size_1 = SkISize::Make(64, 64);
auto layer_tree_1 = std::make_unique<LayerTree>(frame_size_1, 100.0f, 1.0f);
layer_tree_1->RecordBuildTime(build_begin, target_time_1);
layer_tree_holder.PushIfNewer(std::move(layer_tree_1));
const auto frame_size_2 = SkISize::Make(128, 128);
auto layer_tree_2 = std::make_unique<LayerTree>(frame_size_2, 100.0f, 1.0f);
layer_tree_2->RecordBuildTime(build_begin, target_time_2);
layer_tree_holder.PushIfNewer(std::move(layer_tree_2));
const auto stored = layer_tree_holder.Pop();
ASSERT_EQ(stored->frame_size(), frame_size_1);
ASSERT_TRUE(layer_tree_holder.IsEmpty());
}
} // namespace testing
} // namespace flutter