1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "tools/debugger/JsonWriteBuffer.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "tools/debugger/DrawCommand.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_civoid JsonWriteBuffer::append(const char* type) { 13cb93a386Sopenharmony_ci SkString fullName = SkStringPrintf("%02d_%s", fCount++, type); 14cb93a386Sopenharmony_ci fWriter->appendName(fullName.c_str()); 15cb93a386Sopenharmony_ci} 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_civoid JsonWriteBuffer::writePad32(const void* data, size_t size) { 18cb93a386Sopenharmony_ci this->append("rawBytes"); 19cb93a386Sopenharmony_ci fWriter->beginArray(); 20cb93a386Sopenharmony_ci const uint8_t* bytes = reinterpret_cast<const uint8_t*>(data); 21cb93a386Sopenharmony_ci for (size_t i = 0; i < size; ++i) { 22cb93a386Sopenharmony_ci SkString hexByte = SkStringPrintf("%02x", bytes[i]); 23cb93a386Sopenharmony_ci fWriter->appendString(hexByte.c_str()); 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci fWriter->endArray(); 26cb93a386Sopenharmony_ci} 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_civoid JsonWriteBuffer::writeByteArray(const void* data, size_t size) { 29cb93a386Sopenharmony_ci this->append("byteArray"); 30cb93a386Sopenharmony_ci fWriter->beginArray(); 31cb93a386Sopenharmony_ci const uint8_t* bytes = reinterpret_cast<const uint8_t*>(data); 32cb93a386Sopenharmony_ci for (size_t i = 0; i < size; ++i) { 33cb93a386Sopenharmony_ci SkString hexByte = SkStringPrintf("%02x", bytes[i]); 34cb93a386Sopenharmony_ci fWriter->appendString(hexByte.c_str()); 35cb93a386Sopenharmony_ci } 36cb93a386Sopenharmony_ci fWriter->endArray(); 37cb93a386Sopenharmony_ci} 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_civoid JsonWriteBuffer::writeBool(bool value) { 40cb93a386Sopenharmony_ci this->append("bool"); 41cb93a386Sopenharmony_ci fWriter->appendBool(value); 42cb93a386Sopenharmony_ci} 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_civoid JsonWriteBuffer::writeScalar(SkScalar value) { 45cb93a386Sopenharmony_ci this->append("scalar"); 46cb93a386Sopenharmony_ci fWriter->appendFloat(value); 47cb93a386Sopenharmony_ci} 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_civoid JsonWriteBuffer::writeScalarArray(const SkScalar* value, uint32_t count) { 50cb93a386Sopenharmony_ci this->append("scalarArray"); 51cb93a386Sopenharmony_ci fWriter->beginArray(); 52cb93a386Sopenharmony_ci for (uint32_t i = 0; i < count; ++i) { 53cb93a386Sopenharmony_ci fWriter->appendFloat(value[i]); 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci fWriter->endArray(); 56cb93a386Sopenharmony_ci} 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_civoid JsonWriteBuffer::writeInt(int32_t value) { 59cb93a386Sopenharmony_ci this->append("int"); 60cb93a386Sopenharmony_ci fWriter->appendS32(value); 61cb93a386Sopenharmony_ci} 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_civoid JsonWriteBuffer::writeIntArray(const int32_t* value, uint32_t count) { 64cb93a386Sopenharmony_ci this->append("intArray"); 65cb93a386Sopenharmony_ci fWriter->beginArray(); 66cb93a386Sopenharmony_ci for (uint32_t i = 0; i < count; ++i) { 67cb93a386Sopenharmony_ci fWriter->appendS32(value[i]); 68cb93a386Sopenharmony_ci } 69cb93a386Sopenharmony_ci fWriter->endArray(); 70cb93a386Sopenharmony_ci} 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_civoid JsonWriteBuffer::writeUInt(uint32_t value) { 73cb93a386Sopenharmony_ci this->append("uint"); 74cb93a386Sopenharmony_ci fWriter->appendU32(value); 75cb93a386Sopenharmony_ci} 76cb93a386Sopenharmony_ci 77cb93a386Sopenharmony_civoid JsonWriteBuffer::writeString(const char* value) { 78cb93a386Sopenharmony_ci this->append("string"); 79cb93a386Sopenharmony_ci fWriter->appendString(value); 80cb93a386Sopenharmony_ci} 81cb93a386Sopenharmony_ci 82cb93a386Sopenharmony_civoid JsonWriteBuffer::writeFlattenable(const SkFlattenable* flattenable) { 83cb93a386Sopenharmony_ci if (flattenable) { 84cb93a386Sopenharmony_ci this->append(flattenable->getTypeName()); 85cb93a386Sopenharmony_ci fWriter->beginObject(); 86cb93a386Sopenharmony_ci JsonWriteBuffer flattenableBuffer(fWriter, fUrlDataManager); 87cb93a386Sopenharmony_ci flattenable->flatten(flattenableBuffer); 88cb93a386Sopenharmony_ci fWriter->endObject(); 89cb93a386Sopenharmony_ci } else { 90cb93a386Sopenharmony_ci this->append("flattenable"); 91cb93a386Sopenharmony_ci fWriter->appendPointer(nullptr); 92cb93a386Sopenharmony_ci } 93cb93a386Sopenharmony_ci} 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_civoid JsonWriteBuffer::writeColor(SkColor color) { 96cb93a386Sopenharmony_ci this->append("color"); 97cb93a386Sopenharmony_ci DrawCommand::MakeJsonColor(*fWriter, color); 98cb93a386Sopenharmony_ci} 99cb93a386Sopenharmony_ci 100cb93a386Sopenharmony_civoid JsonWriteBuffer::writeColorArray(const SkColor* color, uint32_t count) { 101cb93a386Sopenharmony_ci this->append("colorArray"); 102cb93a386Sopenharmony_ci fWriter->beginArray(); 103cb93a386Sopenharmony_ci for (uint32_t i = 0; i < count; ++i) { 104cb93a386Sopenharmony_ci DrawCommand::MakeJsonColor(*fWriter, color[i]); 105cb93a386Sopenharmony_ci } 106cb93a386Sopenharmony_ci fWriter->endArray(); 107cb93a386Sopenharmony_ci} 108cb93a386Sopenharmony_ci 109cb93a386Sopenharmony_civoid JsonWriteBuffer::writeColor4f(const SkColor4f& color) { 110cb93a386Sopenharmony_ci this->append("color"); 111cb93a386Sopenharmony_ci DrawCommand::MakeJsonColor4f(*fWriter, color); 112cb93a386Sopenharmony_ci} 113cb93a386Sopenharmony_ci 114cb93a386Sopenharmony_civoid JsonWriteBuffer::writeColor4fArray(const SkColor4f* color, uint32_t count) { 115cb93a386Sopenharmony_ci this->append("colorArray"); 116cb93a386Sopenharmony_ci fWriter->beginArray(); 117cb93a386Sopenharmony_ci for (uint32_t i = 0; i < count; ++i) { 118cb93a386Sopenharmony_ci DrawCommand::MakeJsonColor4f(*fWriter, color[i]); 119cb93a386Sopenharmony_ci } 120cb93a386Sopenharmony_ci fWriter->endArray(); 121cb93a386Sopenharmony_ci} 122cb93a386Sopenharmony_ci 123cb93a386Sopenharmony_civoid JsonWriteBuffer::writePoint(const SkPoint& point) { 124cb93a386Sopenharmony_ci this->append("point"); 125cb93a386Sopenharmony_ci DrawCommand::MakeJsonPoint(*fWriter, point); 126cb93a386Sopenharmony_ci} 127cb93a386Sopenharmony_ci 128cb93a386Sopenharmony_civoid JsonWriteBuffer::writePoint3(const SkPoint3& point) { 129cb93a386Sopenharmony_ci this->append("point3"); 130cb93a386Sopenharmony_ci DrawCommand::MakeJsonPoint3(*fWriter, point); 131cb93a386Sopenharmony_ci} 132cb93a386Sopenharmony_ci 133cb93a386Sopenharmony_civoid JsonWriteBuffer::writePointArray(const SkPoint* point, uint32_t count) { 134cb93a386Sopenharmony_ci this->append("pointArray"); 135cb93a386Sopenharmony_ci fWriter->beginArray(); 136cb93a386Sopenharmony_ci for (uint32_t i = 0; i < count; ++i) { 137cb93a386Sopenharmony_ci DrawCommand::MakeJsonPoint(*fWriter, point[i]); 138cb93a386Sopenharmony_ci } 139cb93a386Sopenharmony_ci fWriter->endArray(); 140cb93a386Sopenharmony_ci} 141cb93a386Sopenharmony_ci 142cb93a386Sopenharmony_civoid JsonWriteBuffer::write(const SkM44& matrix) { 143cb93a386Sopenharmony_ci this->append("matrix"); 144cb93a386Sopenharmony_ci fWriter->beginArray(); 145cb93a386Sopenharmony_ci for (int r = 0; r < 4; ++r) { 146cb93a386Sopenharmony_ci fWriter->beginArray(nullptr, false); 147cb93a386Sopenharmony_ci SkV4 v = matrix.row(r); 148cb93a386Sopenharmony_ci for (int c = 0; c < 4; ++c) { 149cb93a386Sopenharmony_ci fWriter->appendFloat(v[c]); 150cb93a386Sopenharmony_ci } 151cb93a386Sopenharmony_ci fWriter->endArray(); 152cb93a386Sopenharmony_ci } 153cb93a386Sopenharmony_ci fWriter->endArray(); 154cb93a386Sopenharmony_ci} 155cb93a386Sopenharmony_ci 156cb93a386Sopenharmony_civoid JsonWriteBuffer::writeMatrix(const SkMatrix& matrix) { 157cb93a386Sopenharmony_ci this->append("matrix"); 158cb93a386Sopenharmony_ci DrawCommand::MakeJsonMatrix(*fWriter, matrix); 159cb93a386Sopenharmony_ci} 160cb93a386Sopenharmony_ci 161cb93a386Sopenharmony_civoid JsonWriteBuffer::writeIRect(const SkIRect& rect) { 162cb93a386Sopenharmony_ci this->append("irect"); 163cb93a386Sopenharmony_ci DrawCommand::MakeJsonIRect(*fWriter, rect); 164cb93a386Sopenharmony_ci} 165cb93a386Sopenharmony_ci 166cb93a386Sopenharmony_civoid JsonWriteBuffer::writeRect(const SkRect& rect) { 167cb93a386Sopenharmony_ci this->append("rect"); 168cb93a386Sopenharmony_ci DrawCommand::MakeJsonRect(*fWriter, rect); 169cb93a386Sopenharmony_ci} 170cb93a386Sopenharmony_ci 171cb93a386Sopenharmony_civoid JsonWriteBuffer::writeRegion(const SkRegion& region) { 172cb93a386Sopenharmony_ci this->append("region"); 173cb93a386Sopenharmony_ci DrawCommand::MakeJsonRegion(*fWriter, region); 174cb93a386Sopenharmony_ci} 175cb93a386Sopenharmony_ci 176cb93a386Sopenharmony_civoid JsonWriteBuffer::writePath(const SkPath& path) { 177cb93a386Sopenharmony_ci this->append("path"); 178cb93a386Sopenharmony_ci DrawCommand::MakeJsonPath(*fWriter, path); 179cb93a386Sopenharmony_ci} 180cb93a386Sopenharmony_ci 181cb93a386Sopenharmony_cisize_t JsonWriteBuffer::writeStream(SkStream* stream, size_t length) { 182cb93a386Sopenharmony_ci // Contents not supported 183cb93a386Sopenharmony_ci this->append("stream"); 184cb93a386Sopenharmony_ci fWriter->appendU64(static_cast<uint64_t>(length)); 185cb93a386Sopenharmony_ci return 0; 186cb93a386Sopenharmony_ci} 187cb93a386Sopenharmony_ci 188cb93a386Sopenharmony_civoid JsonWriteBuffer::writeImage(const SkImage* image) { 189cb93a386Sopenharmony_ci this->append("image"); 190cb93a386Sopenharmony_ci fWriter->beginObject(); 191cb93a386Sopenharmony_ci DrawCommand::flatten(*image, *fWriter, *fUrlDataManager); 192cb93a386Sopenharmony_ci fWriter->endObject(); 193cb93a386Sopenharmony_ci} 194cb93a386Sopenharmony_ci 195cb93a386Sopenharmony_civoid JsonWriteBuffer::writeTypeface(SkTypeface* typeface) { 196cb93a386Sopenharmony_ci // Unsupported 197cb93a386Sopenharmony_ci this->append("typeface"); 198cb93a386Sopenharmony_ci fWriter->appendPointer(typeface); 199cb93a386Sopenharmony_ci} 200cb93a386Sopenharmony_ci 201cb93a386Sopenharmony_civoid JsonWriteBuffer::writePaint(const SkPaint& paint) { 202cb93a386Sopenharmony_ci this->append("paint"); 203cb93a386Sopenharmony_ci DrawCommand::MakeJsonPaint(*fWriter, paint, *fUrlDataManager); 204cb93a386Sopenharmony_ci} 205