// 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 "flutter/lib/ui/compositing/scene.h"

#include "lib/tonic/dart_args.h"
#include "lib/tonic/dart_binding_macros.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/dart_library_natives.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPictureRecorder.h"

namespace blink {

IMPLEMENT_WRAPPERTYPEINFO(ui, Scene);

#define FOR_EACH_BINDING(V) V(Scene, dispose)

DART_BIND_ALL(Scene, FOR_EACH_BINDING)

ftl::RefPtr<Scene> Scene::create(std::unique_ptr<flow::Layer> rootLayer,
                                 uint32_t rasterizerTracingThreshold) {
  return ftl::MakeRefCounted<Scene>(std::move(rootLayer),
                                    rasterizerTracingThreshold);
}

Scene::Scene(std::unique_ptr<flow::Layer> rootLayer,
             uint32_t rasterizerTracingThreshold)
    : m_layerTree(new flow::LayerTree()) {
  m_layerTree->set_root_layer(std::move(rootLayer));
  m_layerTree->set_rasterizer_tracing_threshold(rasterizerTracingThreshold);
}

Scene::~Scene() {}

void Scene::dispose() {
  ClearDartWrapper();
}

std::unique_ptr<flow::LayerTree> Scene::takeLayerTree() {
  return std::move(m_layerTree);
}

}  // namespace blink
