// Copyright 2021 The Crashpad Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef CRASHPAD_CLIENT_SIMULATE_CRASH_IOS_H_
#define CRASHPAD_CLIENT_SIMULATE_CRASH_IOS_H_

#include "client/crashpad_client.h"
#include "util/misc/capture_context.h"

//! \file

//! \brief Captures the CPU context and creates a minidump dump without an
//!     exception. The minidump will immediately become eligible for further
//!     processing, including upload.
//!
//! \sa CRASHPAD_SIMULATE_CRASH_AND_DEFER_PROCESSING
#define CRASHPAD_SIMULATE_CRASH()                             \
  do {                                                        \
    crashpad::NativeCPUContext cpu_context;                   \
    crashpad::CaptureContext(&cpu_context);                   \
    crashpad::CrashpadClient::DumpWithoutCrash(&cpu_context); \
  } while (false)

//! \brief Captures the CPU context and captures an intermediate dump without an
//!     exception. Does not convert the intermediate dump into a minidump.
//!
//! Deferring processing is useful when the application may be in an unstable
//! state, such as during a hang.
//!
//! \sa CRASHPAD_SIMULATE_CRASH
#define CRASHPAD_SIMULATE_CRASH_AND_DEFER_PROCESSING()            \
  do {                                                            \
    crashpad::NativeCPUContext cpu_context;                       \
    crashpad::CaptureContext(&cpu_context);                       \
    crashpad::CrashpadClient::DumpWithoutCrashAndDeferProcessing( \
        &cpu_context);                                            \
  } while (false)

#define CRASHPAD_SIMULATE_CRASH_AND_DEFER_PROCESSING_AT_PATH(path)      \
  do {                                                                  \
    crashpad::NativeCPUContext cpu_context;                             \
    crashpad::CaptureContext(&cpu_context);                             \
    crashpad::CrashpadClient::DumpWithoutCrashAndDeferProcessingAtPath( \
        &cpu_context, path);                                            \
  } while (false)

#endif  // CRASHPAD_CLIENT_SIMULATE_CRASH_IOS_H_
