// 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 "base/debug/debugger.h"
#include "base/logging.h"
#include "base/threading/platform_thread.h"

namespace base {
namespace debug {

static bool is_debug_ui_suppressed = false;

bool WaitForDebugger(int wait_seconds, bool silent) {
#if defined(OS_ANDROID)
  // The pid from which we know which process to attach to are not output by
  // android ddms, so we have to print it out explicitly.
  DLOG(INFO) << "DebugUtil::WaitForDebugger(pid=" << static_cast<int>(getpid())
             << ")";
#endif
  for (int i = 0; i < wait_seconds * 10; ++i) {
    if (BeingDebugged()) {
      if (!silent) {
#if defined(__LB_ANDROID__)
        // Hack around a race condition where the debugger is still attaching
        // and isn't ready to catch the trap thrown by BreakDebugger yet.
        PlatformThread::Sleep(TimeDelta::FromSeconds(5));
#endif
        BreakDebugger();
      }
      return true;
    }
    PlatformThread::Sleep(TimeDelta::FromMilliseconds(100));
  }
  return false;
}

void SetSuppressDebugUI(bool suppress) {
  is_debug_ui_suppressed = suppress;
}

bool IsDebugUISuppressed() {
  return is_debug_ui_suppressed;
}

}  // namespace debug
}  // namespace base
