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 &params) {
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