LLDB  mainline
RenderScriptScriptGroup.cpp
Go to the documentation of this file.
1 //===-- RenderScriptScriptGroup.cpp -----------------------------*- C++ -*-===//
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) {}
43 
45 
46  bool DoExecute(Args &command, CommandReturnObject &result) override {
47  Stream &stream = result.GetOutputStream();
48  RenderScriptRuntime *runtime = static_cast<RenderScriptRuntime *>(
49  m_exe_ctx.GetProcessPtr()->GetLanguageRuntime(
51  assert(runtime);
52  auto &target = m_exe_ctx.GetTargetSP();
53  bool stop_on_all = false;
54  const llvm::StringRef long_stop_all("--stop-on-all"), short_stop_all("-a");
55  std::vector<ConstString> sites;
56  sites.reserve(command.GetArgumentCount());
57  for (size_t i = 0; i < command.GetArgumentCount(); ++i) {
58  const auto arg = command.GetArgumentAtIndex(i);
59  if (long_stop_all == arg || short_stop_all == arg)
60  stop_on_all = true;
61  else
62  sites.push_back(ConstString(arg));
63  }
64  for (const auto &name : sites) {
65  runtime->PlaceBreakpointOnScriptGroup(target, stream, name, stop_on_all);
66  }
68  return true;
69  }
70 };
71 
73  : public CommandObjectMultiword {
74 public:
76  CommandInterpreter &interpreter)
78  interpreter, "renderscript scriptgroup breakpoint",
79  "Renderscript scriptgroup breakpoint interaction.",
80  "renderscript scriptgroup breakpoint set [--stop-on-all/-a]"
81  "<scriptgroup name> ...",
82  eCommandRequiresProcess | eCommandProcessMustBeLaunched) {
83  LoadSubCommand(
84  "set",
86  interpreter)));
87  }
88 
90 };
91 
93 public:
95  : CommandObjectParsed(interpreter, "renderscript scriptgroup list",
96  "List all currently discovered script groups.",
97  "renderscript scriptgroup list",
98  eCommandRequiresProcess |
99  eCommandProcessMustBeLaunched) {}
100 
101  ~CommandObjectRenderScriptScriptGroupList() override = default;
102 
103  bool DoExecute(Args &command, CommandReturnObject &result) override {
104  Stream &stream = result.GetOutputStream();
105  RenderScriptRuntime *runtime = static_cast<RenderScriptRuntime *>(
106  m_exe_ctx.GetProcessPtr()->GetLanguageRuntime(
108  assert(runtime);
109  const RSScriptGroupList &groups = runtime->GetScriptGroups();
110  // print script group count
111  stream.Printf("%" PRIu64 " script %s", uint64_t(groups.size()),
112  (groups.size() == 1) ? "group" : "groups");
113  stream.EOL();
114  // print script group details
115  stream.IndentMore();
116  for (const RSScriptGroupDescriptorSP &g : groups) {
117  if (g) {
118  stream.Indent();
119  // script group name
120  stream.Printf("%s", g->m_name.AsCString());
121  stream.EOL();
122  // print out the kernels
123  stream.IndentMore();
124  for (const auto &k : g->m_kernels) {
125  stream.Indent();
126  stream.Printf(". %s", k.m_name.AsCString());
127  stream.EOL();
128  }
129  stream.IndentLess();
130  }
131  }
132  stream.IndentLess();
134  return true;
135  }
136 };
137 
139 public:
141  : CommandObjectMultiword(interpreter, "renderscript scriptgroup",
142  "Command set for interacting with scriptgroups.",
143  nullptr, eCommandRequiresProcess |
144  eCommandProcessMustBeLaunched) {
145  LoadSubCommand(
146  "breakpoint",
147  CommandObjectSP(
149  LoadSubCommand(
150  "list", CommandObjectSP(
151  new CommandObjectRenderScriptScriptGroupList(interpreter)));
152  }
153 
154  ~CommandObjectRenderScriptScriptGroup() override = default;
155 };
156 
158  lldb_private::CommandInterpreter &interpreter) {
159  return CommandObjectSP(new CommandObjectRenderScriptScriptGroup(interpreter));
160 }
std::vector< RSScriptGroupDescriptorSP > RSScriptGroupList
A command line argument class.
Definition: Args.h:32
Enumerations for broadcasting.
Definition: SBLaunchInfo.h:14
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
CommandObjectRenderScriptScriptGroup(CommandInterpreter &interpreter)
std::shared_ptr< RSScriptGroupDescriptor > RSScriptGroupDescriptorSP
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
Definition: Args.cpp:254
lldb::CommandObjectSP NewCommandObjectRenderScriptScriptGroup(lldb_private::CommandInterpreter &interpreter)
bool DoExecute(Args &command, CommandReturnObject &result) override
bool PlaceBreakpointOnScriptGroup(lldb::TargetSP target, Stream &strm, ConstString name, bool stop_on_all)
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx. ...
Definition: Args.cpp:256
CommandObjectRenderScriptScriptGroupList(CommandInterpreter &interpreter)
bool DoExecute(Args &command, CommandReturnObject &result) override
size_t EOL()
Output and End of Line character to the stream.
Definition: Stream.cpp:127
const lldb_renderscript::RSScriptGroupList & GetScriptGroups() const
CommandObjectRenderScriptScriptGroupBreakpoint(CommandInterpreter &interpreter)
void IndentLess(int amount=2)
Decrement the current indentation level.
Definition: Stream.cpp:221
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
Definition: Stream.cpp:106
A uniqued constant string class.
Definition: ConstString.h:38
Definition: SBAddress.h:15
size_t Indent(const char *s=nullptr)
Indent the current line in the stream.
Definition: Stream.cpp:131
void IndentMore(int amount=2)
Increment the current indentation level.
Definition: Stream.cpp:218
void SetStatus(lldb::ReturnStatus status)
CommandObjectRenderScriptScriptGroupBreakpointSet(CommandInterpreter &interpreter)