// Copyright 2019 The Fuchsia 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 <lib/async-loop/cpp/loop.h>
#include <lib/ui/base_view/cpp/view_provider_component.h>
#include <trace-provider/provider.h>

#include "garnet/lib/vulkan/tests/vklatency/image_pipe_view.h"
#include "src/lib/fxl/command_line.h"
#include "src/lib/fxl/log_settings_command_line.h"

int main(int argc, const char** argv) {
  async::Loop loop(&kAsyncLoopConfigAttachToThread);
  trace::TraceProvider trace_provider(loop.dispatcher());

  auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
  if (!fxl::SetLogSettingsFromCommandLine(command_line))
    return 1;

  const bool protected_output = command_line.HasOption("protected_output");
  scenic::ViewProviderComponent component(
      [&loop, protected_output](scenic::ViewContext view_context) {
        return std::make_unique<examples::ImagePipeView>(
            std::move(view_context), protected_output);
      },
      &loop);
  loop.Run();

  return 0;
}
