LLDB  mainline
RenderScriptScriptGroup.cpp
Go to the documentation of this file.
1 //===-- RenderScriptScriptGroup.cpp ---------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
10 #include "lldb/Core/Debugger.h"
16 #include "lldb/Symbol/Symbol.h"
17 #include "lldb/Symbol/Type.h"
19 #include "lldb/Target/Process.h"
20 #include "lldb/Target/Target.h"
21 #include "lldb/Utility/Args.h"
23 #include "lldb/Utility/Log.h"
24 #include "lldb/Utility/Status.h"
25 
26 #include "RenderScriptRuntime.h"
28 
29 using namespace lldb;
30 using namespace lldb_private;
31 using namespace lldb_renderscript;
32 
34  : public CommandObjectParsed {
35 public:
37  CommandInterpreter &interpreter)
39  interpreter, "renderscript scriptgroup breakpoint set",
40  "Place a breakpoint on all kernels forming a script group.",
41  "renderscript scriptgroup breakpoint set <group_name>",
42  eCommandRequiresProcess | eCommandProcessMustBeLaunched) {
44  m_arguments.push_back({name_arg});
45  }
46 
48 
49  bool DoExecute(Args &command, CommandReturnObject &result) override {
50  Stream &stream = result.GetOutputStream();
51  RenderScriptRuntime *runtime = static_cast<RenderScriptRuntime *>(
52  m_exe_ctx.GetProcessPtr()->GetLanguageRuntime(
54  assert(runtime);
55  auto &target = m_exe_ctx.GetTargetSP();
56  bool stop_on_all = false;
57  const llvm::StringRef long_stop_all("--stop-on-all"), short_stop_all("-a");
58  std::vector<ConstString> sites;
59  sites.reserve(command.GetArgumentCount());
60  for (size_t i = 0; i < command.GetArgumentCount(); ++i) {
61  const auto arg = command.GetArgumentAtIndex(i);
62  if (long_stop_all == arg || short_stop_all == arg)
63  stop_on_all = true;
64  else
65  sites.push_back(ConstString(arg));
66  }
67  for (const auto &name : sites) {
68  runtime->PlaceBreakpointOnScriptGroup(target, stream, name, stop_on_all);
69  }
71  return true;
72  }
73 };
74 
76  : public CommandObjectMultiword {
77 public:
79  CommandInterpreter &interpreter)
81  interpreter, "renderscript scriptgroup breakpoint",
82  "Renderscript scriptgroup breakpoint interaction.",
83  "renderscript scriptgroup breakpoint set [--stop-on-all/-a]"
84  "<scriptgroup name> ...",
85  eCommandRequiresProcess | eCommandProcessMustBeLaunched) {
86  LoadSubCommand(
87  "set",
89  interpreter)));
90  }
91 
93 };
94 
96 public:
98  : CommandObjectParsed(interpreter, "renderscript scriptgroup list",
99  "List all currently discovered script groups.",
100  "renderscript scriptgroup list",
101  eCommandRequiresProcess |
102  eCommandProcessMustBeLaunched) {}
103 
104  ~CommandObjectRenderScriptScriptGroupList() override = default;
105 
106  bool DoExecute(Args &command, CommandReturnObject &result) override {
107  Stream &stream = result.GetOutputStream();
108  RenderScriptRuntime *runtime = static_cast<RenderScriptRuntime *>(
109  m_exe_ctx.GetProcessPtr()->GetLanguageRuntime(
111  assert(runtime);
112  const RSScriptGroupList &groups = runtime->GetScriptGroups();
113  // print script group count
114  stream.Printf("%" PRIu64 " script %s", uint64_t(groups.size()),
115  (groups.size() == 1) ? "group" : "groups");
116  stream.EOL();
117  // print script group details
118  stream.IndentMore();
119  for (const RSScriptGroupDescriptorSP &g : groups) {
120  if (g) {
121  stream.Indent();
122  // script group name
123  stream.Printf("%s", g->m_name.AsCString());
124  stream.EOL();
125  // print out the kernels
126  stream.IndentMore();
127  for (const auto &k : g->m_kernels) {
128  stream.Indent();
129  stream.Printf(". %s", k.m_name.AsCString());
130  stream.EOL();
131  }
132  stream.IndentLess();
133  }
134  }
135  stream.IndentLess();
137  return true;
138  }
139 };
140 
142 public:
144  : CommandObjectMultiword(interpreter, "renderscript scriptgroup",
145  "Command set for interacting with scriptgroups.",
146  nullptr, eCommandRequiresProcess |
147  eCommandProcessMustBeLaunched) {
148  LoadSubCommand(
149  "breakpoint",
150  CommandObjectSP(
152  LoadSubCommand(
153  "list", CommandObjectSP(
154  new CommandObjectRenderScriptScriptGroupList(interpreter)));
155  }
156 
157  ~CommandObjectRenderScriptScriptGroup() override = default;
158 };
159 
161  lldb_private::CommandInterpreter &interpreter) {
162  return CommandObjectSP(new CommandObjectRenderScriptScriptGroup(interpreter));
163 }
lldb_private::Stream::IndentLess
void IndentLess(unsigned amount=2)
Decrement the current indentation level.
Definition: Stream.cpp:171
lldb_private::CommandObjectParsed
Definition: CommandObject.h:389
lldb_private::RenderScriptRuntime
Definition: RenderScriptRuntime.h:298
lldb_private::CommandObject::CommandArgumentData
Used to build individual command argument lists.
Definition: CommandObject.h:91
NewCommandObjectRenderScriptScriptGroup
lldb::CommandObjectSP NewCommandObjectRenderScriptScriptGroup(lldb_private::CommandInterpreter &interpreter)
Definition: RenderScriptScriptGroup.cpp:160
StoppointCallbackContext.h
lldb_private::Stream
Definition: Stream.h:28
lldb_private::Args
Definition: Args.h:33
lldb_private::eArgRepeatPlus
@ eArgRepeatPlus
Definition: lldb-private-enumerations.h:97
CommandReturnObject.h
Debugger.h
Process.h
Target.h
lldb_private::CommandObjectMultiword
Definition: CommandObjectMultiword.h:19
Options.h
lldb_private::Stream::Indent
size_t Indent(llvm::StringRef s="")
Indent the current line in the stream.
Definition: Stream.cpp:130
Log.h
CommandObjectRenderScriptScriptGroupBreakpoint
Definition: RenderScriptScriptGroup.cpp:75
Args.h
lldb_private::CommandReturnObject::SetStatus
void SetStatus(lldb::ReturnStatus status)
Definition: CommandReturnObject.cpp:127
lldb_private::RenderScriptRuntime::GetScriptGroups
const lldb_renderscript::RSScriptGroupList & GetScriptGroups() const
Definition: RenderScriptRuntime.h:398
Type.h
lldb_private::CommandReturnObject::GetOutputStream
Stream & GetOutputStream()
Definition: CommandReturnObject.h:46
lldb_private::ConstString
Definition: ConstString.h:40
RenderScriptRuntime.h
CommandObjectRenderScriptScriptGroupBreakpointSet::CommandObjectRenderScriptScriptGroupBreakpointSet
CommandObjectRenderScriptScriptGroupBreakpointSet(CommandInterpreter &interpreter)
Definition: RenderScriptScriptGroup.cpp:36
lldb_private::CommandInterpreter
Definition: CommandInterpreter.h:214
CommandObjectMultiword.h
CommandObjectRenderScriptScriptGroupList
Definition: RenderScriptScriptGroup.cpp:95
VariableList.h
lldb_private::RenderScriptRuntime::PlaceBreakpointOnScriptGroup
bool PlaceBreakpointOnScriptGroup(lldb::TargetSP target, Stream &strm, ConstString name, bool stop_on_all)
Definition: RenderScriptRuntime.cpp:3768
CommandObjectRenderScriptScriptGroup::CommandObjectRenderScriptScriptGroup
CommandObjectRenderScriptScriptGroup(CommandInterpreter &interpreter)
Definition: RenderScriptScriptGroup.cpp:143
Symbol.h
lldb_private::lldb_renderscript::RSScriptGroupList
std::vector< RSScriptGroupDescriptorSP > RSScriptGroupList
Definition: RenderScriptRuntime.h:249
lldb_private::Args::GetArgumentAtIndex
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
Definition: Args.cpp:259
CommandObjectRenderScriptScriptGroupBreakpointSet::DoExecute
bool DoExecute(Args &command, CommandReturnObject &result) override
Definition: RenderScriptScriptGroup.cpp:49
lldb_private::CommandReturnObject
Definition: CommandReturnObject.h:26
lldb::eLanguageTypeExtRenderScript
@ eLanguageTypeExtRenderScript
RenderScript.
Definition: lldb-enumerations.h:481
lldb_private::Stream::IndentMore
void IndentMore(unsigned amount=2)
Increment the current indentation level.
Definition: Stream.cpp:168
lldb::eReturnStatusSuccessFinishResult
@ eReturnStatusSuccessFinishResult
Definition: lldb-enumerations.h:261
CommandObjectRenderScriptScriptGroupList::CommandObjectRenderScriptScriptGroupList
CommandObjectRenderScriptScriptGroupList(CommandInterpreter &interpreter)
Definition: RenderScriptScriptGroup.cpp:97
lldb_private::Stream::EOL
size_t EOL()
Output and End of Line character to the stream.
Definition: Stream.cpp:128
lldb::eArgTypeName
@ eArgTypeName
Definition: lldb-enumerations.h:551
RenderScriptScriptGroup.h
CommandObjectRenderScriptScriptGroupBreakpoint::CommandObjectRenderScriptScriptGroupBreakpoint
CommandObjectRenderScriptScriptGroupBreakpoint(CommandInterpreter &interpreter)
Definition: RenderScriptScriptGroup.cpp:78
PluginManager.h
lldb_private::Stream::Printf
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
Definition: Stream.cpp:107
Status.h
lldb_private
A class that represents a running process on the host machine.
Definition: SBCommandInterpreterRunOptions.h:16
CommandInterpreter.h
ConstString.h
CommandObjectRenderScriptScriptGroupList::DoExecute
bool DoExecute(Args &command, CommandReturnObject &result) override
Definition: RenderScriptScriptGroup.cpp:106
lldb_private::lldb_renderscript::RSScriptGroupDescriptorSP
std::shared_ptr< RSScriptGroupDescriptor > RSScriptGroupDescriptorSP
Definition: RenderScriptRuntime.h:44
lldb_private::Args::GetArgumentCount
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
Definition: Args.h:118
lldb
Definition: SBAddress.h:15
CommandObjectRenderScriptScriptGroup
Definition: RenderScriptScriptGroup.cpp:141
CommandObjectRenderScriptScriptGroupBreakpointSet
Definition: RenderScriptScriptGroup.cpp:33