// Copyright 2018 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 "third_party/blink/renderer/platform/testing/layer_tree_host_embedder.h"

#include "base/threading/thread_task_runner_handle.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"

namespace blink {

LayerTreeHostEmbedder::LayerTreeHostEmbedder()
    : LayerTreeHostEmbedder(/*client=*/nullptr,
                            /*single_thread_client=*/nullptr) {}

LayerTreeHostEmbedder::LayerTreeHostEmbedder(
    cc::LayerTreeHostClient* client,
    cc::LayerTreeHostSingleThreadClient* single_thread_client) {
  cc::LayerTreeSettings settings;
  settings.layer_transforms_should_scale_layer_contents = true;
  settings.single_thread_proxy_scheduler = false;
  settings.use_layer_lists =
      RuntimeEnabledFeatures::CompositeAfterPaintEnabled() ||
      RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled();

  animation_host_ = cc::AnimationHost::CreateMainInstance();
  cc::LayerTreeHost::InitParams params;
  params.client = client ? client : &layer_tree_host_client_;
  params.settings = &settings;
  params.main_task_runner = base::ThreadTaskRunnerHandle::Get();
  params.task_graph_runner = &task_graph_runner_;
  params.mutator_host = animation_host_.get();

  layer_tree_host_ = cc::LayerTreeHost::CreateSingleThreaded(
      single_thread_client ? single_thread_client
                           : &layer_tree_host_single_thread_client_,
      std::move(params));
}

}  // namespace blink
