// Copyright (c) 2011 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 "gpu/tools/compositor_model_bench/render_models.h"

#include <string>
#include <utility>

#include "gpu/tools/compositor_model_bench/forward_render_model.h"

const char* ModelToString(RenderModel m) {
  switch (m) {
    case ForwardRenderModel:
      return "Forward Rendering";
    default:
      return "(unknown render model name)";
  }
}

RenderModelSimulator::RenderModelSimulator(std::unique_ptr<RenderNode> root)
    : root_(std::move(root)) {}

RenderModelSimulator::~RenderModelSimulator() {
}

std::unique_ptr<RenderModelSimulator> ConstructSimulationModel(
    RenderModel model,
    std::unique_ptr<RenderNode> render_tree_root,
    int window_width,
    int window_height) {
  switch (model) {
    case ForwardRenderModel:
      return std::make_unique<ForwardRenderSimulator>(
          std::move(render_tree_root), window_width, window_height);
    default:
      LOG(ERROR) << "Unrecognized render model. "
        "If we know its name, then it's..." << ModelToString(model);
      return nullptr;
  }
}
