1168404Spjd//===-- SBTraceOptions.cpp --------------------------------------*- C++ -*-===// 2168404Spjd// 3168404Spjd// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4168404Spjd// See https://llvm.org/LICENSE.txt for license information. 5168404Spjd// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6168404Spjd// 7168404Spjd//===----------------------------------------------------------------------===// 8168404Spjd 9168404Spjd#include "lldb/API/SBTraceOptions.h" 10168404Spjd#include "SBReproducerPrivate.h" 11168404Spjd#include "lldb/API/SBError.h" 12168404Spjd#include "lldb/API/SBStructuredData.h" 13168404Spjd#include "lldb/Core/StructuredDataImpl.h" 14168404Spjd#include "lldb/Utility/Log.h" 15168404Spjd#include "lldb/Utility/TraceOptions.h" 16168404Spjd 17168404Spjd#include <memory> 18168404Spjd 19168404Spjdusing namespace lldb; 20168404Spjdusing namespace lldb_private; 21168404Spjd 22168404SpjdSBTraceOptions::SBTraceOptions() { 23168404Spjd LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBTraceOptions); 24168404Spjd 25168404Spjd m_traceoptions_sp = std::make_shared<TraceOptions>(); 26168404Spjd} 27168404Spjd 28168404Spjdlldb::TraceType SBTraceOptions::getType() const { 29168404Spjd LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::TraceType, SBTraceOptions, getType); 30168404Spjd 31168404Spjd if (m_traceoptions_sp) 32168404Spjd return m_traceoptions_sp->getType(); 33168404Spjd return lldb::TraceType::eTraceTypeNone; 34168404Spjd} 35168404Spjd 36168404Spjduint64_t SBTraceOptions::getTraceBufferSize() const { 37168404Spjd LLDB_RECORD_METHOD_CONST_NO_ARGS(uint64_t, SBTraceOptions, 38168404Spjd getTraceBufferSize); 39168404Spjd 40168404Spjd if (m_traceoptions_sp) 41168404Spjd return m_traceoptions_sp->getTraceBufferSize(); 42168404Spjd return 0; 43168404Spjd} 44168404Spjd 45168404Spjdlldb::SBStructuredData SBTraceOptions::getTraceParams(lldb::SBError &error) { 46168404Spjd LLDB_RECORD_METHOD(lldb::SBStructuredData, SBTraceOptions, getTraceParams, 47168404Spjd (lldb::SBError &), error); 48168404Spjd 49168404Spjd error.Clear(); 50168404Spjd const lldb_private::StructuredData::DictionarySP dict_obj = 51168404Spjd m_traceoptions_sp->getTraceParams(); 52168404Spjd lldb::SBStructuredData structData; 53168404Spjd if (dict_obj && structData.m_impl_up) 54168404Spjd structData.m_impl_up->SetObjectSP(dict_obj->shared_from_this()); 55168404Spjd else 56168404Spjd error.SetErrorString("Empty trace params"); 57168404Spjd return LLDB_RECORD_RESULT(structData); 58168404Spjd} 59168404Spjd 60168404Spjduint64_t SBTraceOptions::getMetaDataBufferSize() const { 61168404Spjd LLDB_RECORD_METHOD_CONST_NO_ARGS(uint64_t, SBTraceOptions, 62168404Spjd getMetaDataBufferSize); 63168404Spjd 64168404Spjd if (m_traceoptions_sp) 65168404Spjd return m_traceoptions_sp->getTraceBufferSize(); 66168404Spjd return 0; 67168404Spjd} 68168404Spjd 69168404Spjdvoid SBTraceOptions::setTraceParams(lldb::SBStructuredData ¶ms) { 70168404Spjd LLDB_RECORD_METHOD(void, SBTraceOptions, setTraceParams, 71168404Spjd (lldb::SBStructuredData &), params); 72168404Spjd 73168404Spjd if (m_traceoptions_sp && params.m_impl_up) { 74168404Spjd StructuredData::ObjectSP obj_sp = params.m_impl_up->GetObjectSP(); 75168404Spjd if (obj_sp && obj_sp->GetAsDictionary() != nullptr) 76168404Spjd m_traceoptions_sp->setTraceParams( 77168404Spjd std::static_pointer_cast<StructuredData::Dictionary>(obj_sp)); 78168404Spjd } 79168404Spjd return; 80168404Spjd} 81168404Spjd 82168404Spjdvoid SBTraceOptions::setType(lldb::TraceType type) { 83168404Spjd LLDB_RECORD_METHOD(void, SBTraceOptions, setType, (lldb::TraceType), type); 84168404Spjd 85168404Spjd if (m_traceoptions_sp) 86168404Spjd m_traceoptions_sp->setType(type); 87168404Spjd} 88168404Spjd 89168404Spjdvoid SBTraceOptions::setTraceBufferSize(uint64_t size) { 90168404Spjd LLDB_RECORD_METHOD(void, SBTraceOptions, setTraceBufferSize, (uint64_t), 91168404Spjd size); 92168404Spjd 93168404Spjd if (m_traceoptions_sp) 94168404Spjd m_traceoptions_sp->setTraceBufferSize(size); 95168404Spjd} 96168404Spjd 97168404Spjdvoid SBTraceOptions::setMetaDataBufferSize(uint64_t size) { 98168404Spjd LLDB_RECORD_METHOD(void, SBTraceOptions, setMetaDataBufferSize, (uint64_t), 99168404Spjd size); 100168404Spjd 101168404Spjd if (m_traceoptions_sp) 102168404Spjd m_traceoptions_sp->setMetaDataBufferSize(size); 103168404Spjd} 104168404Spjd 105168404Spjdbool SBTraceOptions::IsValid() { 106168404Spjd LLDB_RECORD_METHOD_NO_ARGS(bool, SBTraceOptions, IsValid); 107168404Spjd return this->operator bool(); 108168404Spjd} 109168404SpjdSBTraceOptions::operator bool() const { 110168404Spjd LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBTraceOptions, operator bool); 111168404Spjd 112168404Spjd if (m_traceoptions_sp) 113168404Spjd return true; 114168404Spjd return false; 115168404Spjd} 116168404Spjd 117168404Spjdvoid SBTraceOptions::setThreadID(lldb::tid_t thread_id) { 118168404Spjd LLDB_RECORD_METHOD(void, SBTraceOptions, setThreadID, (lldb::tid_t), 119168404Spjd thread_id); 120168404Spjd 121168404Spjd if (m_traceoptions_sp) 122168404Spjd m_traceoptions_sp->setThreadID(thread_id); 123168404Spjd} 124168404Spjd 125168404Spjdlldb::tid_t SBTraceOptions::getThreadID() { 126168404Spjd LLDB_RECORD_METHOD_NO_ARGS(lldb::tid_t, SBTraceOptions, getThreadID); 127168404Spjd 128168404Spjd if (m_traceoptions_sp) 129168404Spjd return m_traceoptions_sp->getThreadID(); 130168404Spjd return LLDB_INVALID_THREAD_ID; 131168404Spjd} 132168404Spjd 133168404Spjdnamespace lldb_private { 134168404Spjdnamespace repro { 135168404Spjd 136168404Spjdtemplate <> 137168404Spjdvoid RegisterMethods<SBTraceOptions>(Registry &R) { 138168404Spjd LLDB_REGISTER_CONSTRUCTOR(SBTraceOptions, ()); 139168404Spjd LLDB_REGISTER_METHOD_CONST(lldb::TraceType, SBTraceOptions, getType, ()); 140168404Spjd LLDB_REGISTER_METHOD_CONST(uint64_t, SBTraceOptions, getTraceBufferSize, 141168404Spjd ()); 142168404Spjd LLDB_REGISTER_METHOD(lldb::SBStructuredData, SBTraceOptions, getTraceParams, 143168404Spjd (lldb::SBError &)); 144168404Spjd LLDB_REGISTER_METHOD_CONST(uint64_t, SBTraceOptions, getMetaDataBufferSize, 145168404Spjd ()); 146168404Spjd LLDB_REGISTER_METHOD(void, SBTraceOptions, setTraceParams, 147168404Spjd (lldb::SBStructuredData &)); 148168404Spjd LLDB_REGISTER_METHOD(void, SBTraceOptions, setType, (lldb::TraceType)); 149168404Spjd LLDB_REGISTER_METHOD(void, SBTraceOptions, setTraceBufferSize, (uint64_t)); 150168404Spjd LLDB_REGISTER_METHOD(void, SBTraceOptions, setMetaDataBufferSize, 151168404Spjd (uint64_t)); 152168404Spjd LLDB_REGISTER_METHOD(bool, SBTraceOptions, IsValid, ()); 153168404Spjd LLDB_REGISTER_METHOD_CONST(bool, SBTraceOptions, operator bool, ()); 154168404Spjd LLDB_REGISTER_METHOD(void, SBTraceOptions, setThreadID, (lldb::tid_t)); 155168404Spjd LLDB_REGISTER_METHOD(lldb::tid_t, SBTraceOptions, getThreadID, ()); 156168404Spjd} 157168404Spjd 158168404Spjd} 159168404Spjd} 160168404Spjd