diff options
Diffstat (limited to 'lldb/source/API/SBTraceOptions.cpp')
| -rw-r--r-- | lldb/source/API/SBTraceOptions.cpp | 159 | 
1 files changed, 159 insertions, 0 deletions
| diff --git a/lldb/source/API/SBTraceOptions.cpp b/lldb/source/API/SBTraceOptions.cpp new file mode 100644 index 000000000000..a24cdd59af0b --- /dev/null +++ b/lldb/source/API/SBTraceOptions.cpp @@ -0,0 +1,159 @@ +//===-- SBTraceOptions.cpp --------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/API/SBTraceOptions.h" +#include "SBReproducerPrivate.h" +#include "lldb/API/SBError.h" +#include "lldb/API/SBStructuredData.h" +#include "lldb/Core/StructuredDataImpl.h" +#include "lldb/Utility/Log.h" +#include "lldb/Utility/TraceOptions.h" + +#include <memory> + +using namespace lldb; +using namespace lldb_private; + +SBTraceOptions::SBTraceOptions() { +  LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBTraceOptions); + +  m_traceoptions_sp = std::make_shared<TraceOptions>(); +} + +lldb::TraceType SBTraceOptions::getType() const { +  LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::TraceType, SBTraceOptions, getType); + +  if (m_traceoptions_sp) +    return m_traceoptions_sp->getType(); +  return lldb::TraceType::eTraceTypeNone; +} + +uint64_t SBTraceOptions::getTraceBufferSize() const { +  LLDB_RECORD_METHOD_CONST_NO_ARGS(uint64_t, SBTraceOptions, +                                   getTraceBufferSize); + +  if (m_traceoptions_sp) +    return m_traceoptions_sp->getTraceBufferSize(); +  return 0; +} + +lldb::SBStructuredData SBTraceOptions::getTraceParams(lldb::SBError &error) { +  LLDB_RECORD_METHOD(lldb::SBStructuredData, SBTraceOptions, getTraceParams, +                     (lldb::SBError &), error); + +  error.Clear(); +  const lldb_private::StructuredData::DictionarySP dict_obj = +      m_traceoptions_sp->getTraceParams(); +  lldb::SBStructuredData structData; +  if (dict_obj && structData.m_impl_up) +    structData.m_impl_up->SetObjectSP(dict_obj->shared_from_this()); +  else +    error.SetErrorString("Empty trace params"); +  return LLDB_RECORD_RESULT(structData); +} + +uint64_t SBTraceOptions::getMetaDataBufferSize() const { +  LLDB_RECORD_METHOD_CONST_NO_ARGS(uint64_t, SBTraceOptions, +                                   getMetaDataBufferSize); + +  if (m_traceoptions_sp) +    return m_traceoptions_sp->getTraceBufferSize(); +  return 0; +} + +void SBTraceOptions::setTraceParams(lldb::SBStructuredData ¶ms) { +  LLDB_RECORD_METHOD(void, SBTraceOptions, setTraceParams, +                     (lldb::SBStructuredData &), params); + +  if (m_traceoptions_sp && params.m_impl_up) { +    StructuredData::ObjectSP obj_sp = params.m_impl_up->GetObjectSP(); +    if (obj_sp && obj_sp->GetAsDictionary() != nullptr) +      m_traceoptions_sp->setTraceParams( +          std::static_pointer_cast<StructuredData::Dictionary>(obj_sp)); +  } +  return; +} + +void SBTraceOptions::setType(lldb::TraceType type) { +  LLDB_RECORD_METHOD(void, SBTraceOptions, setType, (lldb::TraceType), type); + +  if (m_traceoptions_sp) +    m_traceoptions_sp->setType(type); +} + +void SBTraceOptions::setTraceBufferSize(uint64_t size) { +  LLDB_RECORD_METHOD(void, SBTraceOptions, setTraceBufferSize, (uint64_t), +                     size); + +  if (m_traceoptions_sp) +    m_traceoptions_sp->setTraceBufferSize(size); +} + +void SBTraceOptions::setMetaDataBufferSize(uint64_t size) { +  LLDB_RECORD_METHOD(void, SBTraceOptions, setMetaDataBufferSize, (uint64_t), +                     size); + +  if (m_traceoptions_sp) +    m_traceoptions_sp->setMetaDataBufferSize(size); +} + +bool SBTraceOptions::IsValid() { +  LLDB_RECORD_METHOD_NO_ARGS(bool, SBTraceOptions, IsValid); +  return this->operator bool(); +} +SBTraceOptions::operator bool() const { +  LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBTraceOptions, operator bool); + +  if (m_traceoptions_sp) +    return true; +  return false; +} + +void SBTraceOptions::setThreadID(lldb::tid_t thread_id) { +  LLDB_RECORD_METHOD(void, SBTraceOptions, setThreadID, (lldb::tid_t), +                     thread_id); + +  if (m_traceoptions_sp) +    m_traceoptions_sp->setThreadID(thread_id); +} + +lldb::tid_t SBTraceOptions::getThreadID() { +  LLDB_RECORD_METHOD_NO_ARGS(lldb::tid_t, SBTraceOptions, getThreadID); + +  if (m_traceoptions_sp) +    return m_traceoptions_sp->getThreadID(); +  return LLDB_INVALID_THREAD_ID; +} + +namespace lldb_private { +namespace repro { + +template <> +void RegisterMethods<SBTraceOptions>(Registry &R) { +  LLDB_REGISTER_CONSTRUCTOR(SBTraceOptions, ()); +  LLDB_REGISTER_METHOD_CONST(lldb::TraceType, SBTraceOptions, getType, ()); +  LLDB_REGISTER_METHOD_CONST(uint64_t, SBTraceOptions, getTraceBufferSize, +                             ()); +  LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBTraceOptions, getTraceParams, +                       (lldb::SBError &)); +  LLDB_REGISTER_METHOD_CONST(uint64_t, SBTraceOptions, getMetaDataBufferSize, +                             ()); +  LLDB_REGISTER_METHOD(void, SBTraceOptions, setTraceParams, +                       (lldb::SBStructuredData &)); +  LLDB_REGISTER_METHOD(void, SBTraceOptions, setType, (lldb::TraceType)); +  LLDB_REGISTER_METHOD(void, SBTraceOptions, setTraceBufferSize, (uint64_t)); +  LLDB_REGISTER_METHOD(void, SBTraceOptions, setMetaDataBufferSize, +                       (uint64_t)); +  LLDB_REGISTER_METHOD(bool, SBTraceOptions, IsValid, ()); +  LLDB_REGISTER_METHOD_CONST(bool, SBTraceOptions, operator bool, ()); +  LLDB_REGISTER_METHOD(void, SBTraceOptions, setThreadID, (lldb::tid_t)); +  LLDB_REGISTER_METHOD(lldb::tid_t, SBTraceOptions, getThreadID, ()); +} + +} +} | 
