43 default:
return "[???]";
52 switch (
fSlotInfo[slotIndex].numberKind) {
55 static_assert(
sizeof(uintValue) ==
sizeof(valueBits));
56 memcpy(&uintValue, &valueBits,
sizeof(uintValue));
61 static_assert(
sizeof(floatValue) ==
sizeof(valueBits));
62 memcpy(&floatValue, &valueBits,
sizeof(floatValue));
74 switch (
fSlotInfo[slotIndex].numberKind) {
76 return value ?
"true" :
"false";
96 std::stringstream stream{
source};
97 while (stream.good()) {
99 std::getline(stream,
fSource.back(),
'\n');
104 for (
size_t index = 0; index <
fSlotInfo.size(); ++index) {
112 switch (
info.numberKind) {
121 if (
info.rows != 1) {
137 for (
size_t index = 0; index <
fFuncInfo.size(); ++index) {
150 std::string indent =
"";
152 int data0 = traceInfo.data[0];
153 int data1 = traceInfo.data[1];
154 switch (traceInfo.op) {
155 case SkSL::TraceInfo::Op::kLine:
161 case SkSL::TraceInfo::Op::kVar: {
170 case SkSL::TraceInfo::Op::kEnter:
177 case SkSL::TraceInfo::Op::kExit:
178 indent.resize(indent.size() - 2);
184 case SkSL::TraceInfo::Op::kScope:
185 for (
int delta = data0; delta < 0; ++delta) {
192 for (
int delta = data0; delta > 0; --delta) {
193 indent.push_back(
' ');
209 for (
const std::string& line :
fSource) {
216 for (
size_t index = 0; index <
fSlotInfo.size(); ++index) {
224 if (
info.groupIndex !=
info.componentIndex) {
229 if (
info.fnReturnValue >= 0) {
238 for (
size_t index = 0; index <
fFuncInfo.size(); ++index) {
249 for (
size_t index = 0; index <
fTraceInfo.size(); ++index) {
255 int lastDataIdx = std::size(trace.
data) - 1;
256 while (lastDataIdx >= 0 && !trace.
data[lastDataIdx]) {
259 for (
int dataIdx = 0; dataIdx <= lastDataIdx; ++dataIdx) {
272 skjson::DOM json(
reinterpret_cast<const char*
>(data->bytes()), data->size());
293 fSource.push_back(line->begin());
320 if (!
name || !columns || !rows || !index || !kind || !line) {
325 info.columns = **columns;
327 info.componentIndex = **index;
328 info.groupIndex = groupIdx ? **groupIdx :
info.componentIndex;
331 info.fnReturnValue = retval ? **retval : -1;
369 if (!element || element->size() < 1 || element->size() > (1 + std::size(
info.data))) {
377 for (
size_t elemIdx = 1; elemIdx < element->size(); ++elemIdx) {
382 info.data[elemIdx - 1] = **dataVal;
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
static constexpr char kTraceVersion[]
sk_sp< SkData > SkCopyStreamToData(SkStream *stream)
void appendS32(int32_t value)
void appendNString(char const (&value)[N])
void beginArray(const char *name=nullptr, bool multiline=true)
void beginObject(const char *name=nullptr, bool multiline=true)
void appendString(const char *value, size_t size)
void writeTrace(SkWStream *w) const override
std::string getSlotValue(int slotIndex, int32_t value) const
bool readTrace(SkStream *r)
std::vector< FunctionDebugInfo > fFuncInfo
void setSource(const std::string &source)
std::vector< TraceInfo > fTraceInfo
void setTraceCoord(const SkIPoint &coord)
std::vector< std::string > fSource
std::vector< SlotDebugInfo > fSlotInfo
double interpretValueBits(int slotIndex, int32_t valueBits) const
void dump(SkWStream *o) const override
std::string slotValueToString(int slotIndex, double value) const
std::string getSlotComponentSuffix(int slotIndex) const
bool writeDecAsText(int32_t)
bool writeText(const char text[])
const Value & root() const
const char * begin() const
static const uint8_t buffer[]