// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/android/browser_startup_controller.h"

#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "content/browser/android/content_startup_flags.h"
#include "content/browser/browser_main_loop.h"

// Must come after all headers that specialize FromJniType() / ToJniType().
#include "content/public/android/content_main_dex_jni/BrowserStartupControllerImpl_jni.h"

using base::android::JavaParamRef;

namespace content {

void BrowserStartupComplete(
    int result,
    base::TimeDelta longest_duration_of_posted_startup_tasks,
    base::TimeDelta total_duration_of_posted_startup_tasks) {
  JNIEnv* env = base::android::AttachCurrentThread();
  Java_BrowserStartupControllerImpl_browserStartupComplete(
      env, result,
      /*longestDurationOfPostedStartupTasksMs=*/
      longest_duration_of_posted_startup_tasks.InMilliseconds(),
      /*totalDurationOfPostedStartupTasksMs=*/
      total_duration_of_posted_startup_tasks.InMilliseconds());
}

void MinimalBrowserStartupComplete() {
  JNIEnv* env = base::android::AttachCurrentThread();
  Java_BrowserStartupControllerImpl_minimalBrowserStartupComplete(env);
}

bool ShouldStartGpuProcessOnBrowserStartup() {
  JNIEnv* env = base::android::AttachCurrentThread();
  return Java_BrowserStartupControllerImpl_shouldStartGpuProcessOnBrowserStartup(
      env);
}

static void JNI_BrowserStartupControllerImpl_SetCommandLineFlags(
    JNIEnv* env,
    jboolean single_process) {
  SetContentCommandLineFlags(static_cast<bool>(single_process));
}

static void JNI_BrowserStartupControllerImpl_FlushStartupTasks(
    JNIEnv* env,
    jboolean was_posted) {
  BrowserMainLoop::GetInstance()->SynchronouslyFlushStartupTasks(was_posted);
}

}  // namespace content
