// Copyright 2014 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 <cstdio>

#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/message_loop/message_loop.h"

#include "third_party/khronos_glcts/framework/common/tcuApp.hpp"
#include "third_party/khronos_glcts/framework/common/tcuCommandLine.hpp"
#include "third_party/khronos_glcts/framework/common/tcuDefs.hpp"
#include "third_party/khronos_glcts/framework/common/tcuPlatform.hpp"
#include "third_party/khronos_glcts/framework/common/tcuResource.hpp"
#include "third_party/khronos_glcts/framework/common/tcuTestLog.hpp"
#include "third_party/khronos_glcts/framework/delibs/decpp/deUniquePtr.hpp"

// implemented in the native platform
tcu::Platform* createPlatform ();

void GTFMain(int argc, char* argv[]) {
  setvbuf(stdout, DE_nullptr, _IOLBF, 4 * 1024);

  try {
    tcu::CommandLine cmdLine(argc, argv);
    tcu::DirArchive archive(cmdLine.getArchiveDir());
    tcu::TestLog log(cmdLine.getLogFileName(), cmdLine.getLogFlags());
    de::UniquePtr<tcu::Platform> platform(createPlatform());
    de::UniquePtr<tcu::App> app(
      new tcu::App(*platform, archive, log, cmdLine));

    // Main loop.
    for (;;) {
      if (!app->iterate())
        break;
    }
  }
  catch (const std::exception& e) {
    tcu::die("%s", e.what());
  }
}

int main(int argc, char *argv[]) {
  base::AtExitManager at_exit;
  base::CommandLine::Init(argc, argv);
  base::MessageLoopForUI message_loop;

  GTFMain(argc, argv);

  return 0;
}
