Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1315)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/LoggingCanvas.cpp

Issue 2218533002: Backporting JSONValues from protocol::Values (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Switch back to partition allocator Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 String name; 55 String name;
56 unsigned pointCount; 56 unsigned pointCount;
57 unsigned pointOffset; 57 unsigned pointOffset;
58 58
59 VerbParams(const String& name, unsigned pointCount, unsigned pointOffset) 59 VerbParams(const String& name, unsigned pointCount, unsigned pointOffset)
60 : name(name) 60 : name(name)
61 , pointCount(pointCount) 61 , pointCount(pointCount)
62 , pointOffset(pointOffset) { } 62 , pointOffset(pointOffset) { }
63 }; 63 };
64 64
65 PassRefPtr<JSONObject> objectForSkRect(const SkRect& rect) 65 std::unique_ptr<JSONObject> objectForSkRect(const SkRect& rect)
66 { 66 {
67 RefPtr<JSONObject> rectItem = JSONObject::create(); 67 std::unique_ptr<JSONObject> rectItem = JSONObject::create();
68 rectItem->setNumber("left", rect.left()); 68 rectItem->setDouble("left", rect.left());
69 rectItem->setNumber("top", rect.top()); 69 rectItem->setDouble("top", rect.top());
70 rectItem->setNumber("right", rect.right()); 70 rectItem->setDouble("right", rect.right());
71 rectItem->setNumber("bottom", rect.bottom()); 71 rectItem->setDouble("bottom", rect.bottom());
72 return rectItem.release(); 72 return rectItem;
73 } 73 }
74 74
75 PassRefPtr<JSONObject> objectForSkIRect(const SkIRect& rect) 75 std::unique_ptr<JSONObject> objectForSkIRect(const SkIRect& rect)
76 { 76 {
77 RefPtr<JSONObject> rectItem = JSONObject::create(); 77 std::unique_ptr<JSONObject> rectItem = JSONObject::create();
78 rectItem->setNumber("left", rect.left()); 78 rectItem->setDouble("left", rect.left());
79 rectItem->setNumber("top", rect.top()); 79 rectItem->setDouble("top", rect.top());
80 rectItem->setNumber("right", rect.right()); 80 rectItem->setDouble("right", rect.right());
81 rectItem->setNumber("bottom", rect.bottom()); 81 rectItem->setDouble("bottom", rect.bottom());
82 return rectItem.release(); 82 return rectItem;
83 } 83 }
84 84
85 String pointModeName(SkCanvas::PointMode mode) 85 String pointModeName(SkCanvas::PointMode mode)
86 { 86 {
87 switch (mode) { 87 switch (mode) {
88 case SkCanvas::kPoints_PointMode: return "Points"; 88 case SkCanvas::kPoints_PointMode: return "Points";
89 case SkCanvas::kLines_PointMode: return "Lines"; 89 case SkCanvas::kLines_PointMode: return "Lines";
90 case SkCanvas::kPolygon_PointMode: return "Polygon"; 90 case SkCanvas::kPolygon_PointMode: return "Polygon";
91 default: 91 default:
92 ASSERT_NOT_REACHED(); 92 ASSERT_NOT_REACHED();
93 return "?"; 93 return "?";
94 }; 94 };
95 } 95 }
96 96
97 PassRefPtr<JSONObject> objectForSkPoint(const SkPoint& point) 97 std::unique_ptr<JSONObject> objectForSkPoint(const SkPoint& point)
98 { 98 {
99 RefPtr<JSONObject> pointItem = JSONObject::create(); 99 std::unique_ptr<JSONObject> pointItem = JSONObject::create();
100 pointItem->setNumber("x", point.x()); 100 pointItem->setDouble("x", point.x());
101 pointItem->setNumber("y", point.y()); 101 pointItem->setDouble("y", point.y());
102 return pointItem.release(); 102 return pointItem;
103 } 103 }
104 104
105 PassRefPtr<JSONArray> arrayForSkPoints(size_t count, const SkPoint points[]) 105 std::unique_ptr<JSONArray> arrayForSkPoints(size_t count, const SkPoint points[] )
106 { 106 {
107 RefPtr<JSONArray> pointsArrayItem = JSONArray::create(); 107 std::unique_ptr<JSONArray> pointsArrayItem = JSONArray::create();
108 for (size_t i = 0; i < count; ++i) 108 for (size_t i = 0; i < count; ++i)
109 pointsArrayItem->pushObject(objectForSkPoint(points[i])); 109 pointsArrayItem->pushObject(objectForSkPoint(points[i]));
110 return pointsArrayItem.release(); 110 return pointsArrayItem;
111 } 111 }
112 112
113 PassRefPtr<JSONObject> objectForRadius(const SkRRect& rrect, SkRRect::Corner cor ner) 113 std::unique_ptr<JSONObject> objectForRadius(const SkRRect& rrect, SkRRect::Corne r corner)
114 { 114 {
115 RefPtr<JSONObject> radiusItem = JSONObject::create(); 115 std::unique_ptr<JSONObject> radiusItem = JSONObject::create();
116 SkVector radius = rrect.radii(corner); 116 SkVector radius = rrect.radii(corner);
117 radiusItem->setNumber("xRadius", radius.x()); 117 radiusItem->setDouble("xRadius", radius.x());
118 radiusItem->setNumber("yRadius", radius.y()); 118 radiusItem->setDouble("yRadius", radius.y());
119 return radiusItem.release(); 119 return radiusItem;
120 } 120 }
121 121
122 String rrectTypeName(SkRRect::Type type) 122 String rrectTypeName(SkRRect::Type type)
123 { 123 {
124 switch (type) { 124 switch (type) {
125 case SkRRect::kEmpty_Type: return "Empty"; 125 case SkRRect::kEmpty_Type: return "Empty";
126 case SkRRect::kRect_Type: return "Rect"; 126 case SkRRect::kRect_Type: return "Rect";
127 case SkRRect::kOval_Type: return "Oval"; 127 case SkRRect::kOval_Type: return "Oval";
128 case SkRRect::kSimple_Type: return "Simple"; 128 case SkRRect::kSimple_Type: return "Simple";
129 case SkRRect::kNinePatch_Type: return "Nine-patch"; 129 case SkRRect::kNinePatch_Type: return "Nine-patch";
(...skipping 10 matching lines...) Expand all
140 case SkRRect::kUpperLeft_Corner: return "upperLeftRadius"; 140 case SkRRect::kUpperLeft_Corner: return "upperLeftRadius";
141 case SkRRect::kUpperRight_Corner: return "upperRightRadius"; 141 case SkRRect::kUpperRight_Corner: return "upperRightRadius";
142 case SkRRect::kLowerRight_Corner: return "lowerRightRadius"; 142 case SkRRect::kLowerRight_Corner: return "lowerRightRadius";
143 case SkRRect::kLowerLeft_Corner: return "lowerLeftRadius"; 143 case SkRRect::kLowerLeft_Corner: return "lowerLeftRadius";
144 default: 144 default:
145 ASSERT_NOT_REACHED(); 145 ASSERT_NOT_REACHED();
146 return "?"; 146 return "?";
147 } 147 }
148 } 148 }
149 149
150 PassRefPtr<JSONObject> objectForSkRRect(const SkRRect& rrect) 150 std::unique_ptr<JSONObject> objectForSkRRect(const SkRRect& rrect)
151 { 151 {
152 RefPtr<JSONObject> rrectItem = JSONObject::create(); 152 std::unique_ptr<JSONObject> rrectItem = JSONObject::create();
153 rrectItem->setString("type", rrectTypeName(rrect.type())); 153 rrectItem->setString("type", rrectTypeName(rrect.type()));
154 rrectItem->setNumber("left", rrect.rect().left()); 154 rrectItem->setDouble("left", rrect.rect().left());
155 rrectItem->setNumber("top", rrect.rect().top()); 155 rrectItem->setDouble("top", rrect.rect().top());
156 rrectItem->setNumber("right", rrect.rect().right()); 156 rrectItem->setDouble("right", rrect.rect().right());
157 rrectItem->setNumber("bottom", rrect.rect().bottom()); 157 rrectItem->setDouble("bottom", rrect.rect().bottom());
158 for (int i = 0; i < 4; ++i) 158 for (int i = 0; i < 4; ++i)
159 rrectItem->setObject(radiusName((SkRRect::Corner) i), objectForRadius(rr ect, (SkRRect::Corner) i)); 159 rrectItem->setObject(radiusName((SkRRect::Corner) i), objectForRadius(rr ect, (SkRRect::Corner) i));
160 return rrectItem.release(); 160 return rrectItem;
161 } 161 }
162 162
163 String fillTypeName(SkPath::FillType type) 163 String fillTypeName(SkPath::FillType type)
164 { 164 {
165 switch (type) { 165 switch (type) {
166 case SkPath::kWinding_FillType: return "Winding"; 166 case SkPath::kWinding_FillType: return "Winding";
167 case SkPath::kEvenOdd_FillType: return "EvenOdd"; 167 case SkPath::kEvenOdd_FillType: return "EvenOdd";
168 case SkPath::kInverseWinding_FillType: return "InverseWinding"; 168 case SkPath::kInverseWinding_FillType: return "InverseWinding";
169 case SkPath::kInverseEvenOdd_FillType: return "InverseEvenOdd"; 169 case SkPath::kInverseEvenOdd_FillType: return "InverseEvenOdd";
170 default: 170 default:
(...skipping 23 matching lines...) Expand all
194 case SkPath::kConic_Verb: return VerbParams("Conic", 2, 1); 194 case SkPath::kConic_Verb: return VerbParams("Conic", 2, 1);
195 case SkPath::kCubic_Verb: return VerbParams("Cubic", 3, 1); 195 case SkPath::kCubic_Verb: return VerbParams("Cubic", 3, 1);
196 case SkPath::kClose_Verb: return VerbParams("Close", 0, 0); 196 case SkPath::kClose_Verb: return VerbParams("Close", 0, 0);
197 case SkPath::kDone_Verb: return VerbParams("Done", 0, 0); 197 case SkPath::kDone_Verb: return VerbParams("Done", 0, 0);
198 default: 198 default:
199 ASSERT_NOT_REACHED(); 199 ASSERT_NOT_REACHED();
200 return VerbParams("?", 0, 0); 200 return VerbParams("?", 0, 0);
201 }; 201 };
202 } 202 }
203 203
204 PassRefPtr<JSONObject> objectForSkPath(const SkPath& path) 204 std::unique_ptr<JSONObject> objectForSkPath(const SkPath& path)
205 { 205 {
206 RefPtr<JSONObject> pathItem = JSONObject::create(); 206 std::unique_ptr<JSONObject> pathItem = JSONObject::create();
207 pathItem->setString("fillType", fillTypeName(path.getFillType())); 207 pathItem->setString("fillType", fillTypeName(path.getFillType()));
208 pathItem->setString("convexity", convexityName(path.getConvexity())); 208 pathItem->setString("convexity", convexityName(path.getConvexity()));
209 pathItem->setBoolean("isRect", path.isRect(0)); 209 pathItem->setBoolean("isRect", path.isRect(0));
210 SkPath::Iter iter(path, false); 210 SkPath::Iter iter(path, false);
211 SkPoint points[4]; 211 SkPoint points[4];
212 RefPtr<JSONArray> pathPointsArray = JSONArray::create(); 212 std::unique_ptr<JSONArray> pathPointsArray = JSONArray::create();
213 for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Ver b; verb = iter.next(points, false)) { 213 for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Ver b; verb = iter.next(points, false)) {
214 VerbParams verbParams = segmentParams(verb); 214 VerbParams verbParams = segmentParams(verb);
215 RefPtr<JSONObject> pathPointItem = JSONObject::create(); 215 std::unique_ptr<JSONObject> pathPointItem = JSONObject::create();
216 pathPointItem->setString("verb", verbParams.name); 216 pathPointItem->setString("verb", verbParams.name);
217 ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGT H(points)); 217 ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGT H(points));
218 pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount , points + verbParams.pointOffset)); 218 pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount , points + verbParams.pointOffset));
219 if (SkPath::kConic_Verb == verb) 219 if (SkPath::kConic_Verb == verb)
220 pathPointItem->setNumber("conicWeight", iter.conicWeight()); 220 pathPointItem->setDouble("conicWeight", iter.conicWeight());
221 pathPointsArray->pushObject(pathPointItem); 221 pathPointsArray->pushObject(std::move(pathPointItem));
222 } 222 }
223 pathItem->setArray("pathPoints", pathPointsArray); 223 pathItem->setArray("pathPoints", std::move(pathPointsArray));
224 pathItem->setObject("bounds", objectForSkRect(path.getBounds())); 224 pathItem->setObject("bounds", objectForSkRect(path.getBounds()));
225 return pathItem.release(); 225 return pathItem;
226 } 226 }
227 227
228 String colorTypeName(SkColorType colorType) 228 String colorTypeName(SkColorType colorType)
229 { 229 {
230 switch (colorType) { 230 switch (colorType) {
231 case kUnknown_SkColorType: return "None"; 231 case kUnknown_SkColorType: return "None";
232 case kAlpha_8_SkColorType: return "A8"; 232 case kAlpha_8_SkColorType: return "A8";
233 case kIndex_8_SkColorType: return "Index8"; 233 case kIndex_8_SkColorType: return "Index8";
234 case kRGB_565_SkColorType: return "RGB565"; 234 case kRGB_565_SkColorType: return "RGB565";
235 case kARGB_4444_SkColorType: return "ARGB4444"; 235 case kARGB_4444_SkColorType: return "ARGB4444";
236 case kN32_SkColorType: return "ARGB8888"; 236 case kN32_SkColorType: return "ARGB8888";
237 default: 237 default:
238 ASSERT_NOT_REACHED(); 238 ASSERT_NOT_REACHED();
239 return "?"; 239 return "?";
240 }; 240 };
241 } 241 }
242 242
243 PassRefPtr<JSONObject> objectForBitmapData(const SkBitmap& bitmap) 243 std::unique_ptr<JSONObject> objectForBitmapData(const SkBitmap& bitmap)
244 { 244 {
245 Vector<unsigned char> output; 245 Vector<unsigned char> output;
246 246
247 if (RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromBitmap(bitmap))) { 247 if (RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromBitmap(bitmap))) {
248 ImagePixelLocker pixelLocker(image, kUnpremul_SkAlphaType, kRGBA_8888_Sk ColorType); 248 ImagePixelLocker pixelLocker(image, kUnpremul_SkAlphaType, kRGBA_8888_Sk ColorType);
249 ImageDataBuffer imageData(IntSize(image->width(), image->height()), 249 ImageDataBuffer imageData(IntSize(image->width(), image->height()),
250 static_cast<const unsigned char*>(pixelLocker.pixels())); 250 static_cast<const unsigned char*>(pixelLocker.pixels()));
251 251
252 PNGImageEncoder::encode(imageData, &output); 252 PNGImageEncoder::encode(imageData, &output);
253 } 253 }
254 254
255 RefPtr<JSONObject> dataItem = JSONObject::create(); 255 std::unique_ptr<JSONObject> dataItem = JSONObject::create();
256 dataItem->setString("base64", WTF::base64Encode(reinterpret_cast<char*>(outp ut.data()), output.size())); 256 dataItem->setString("base64", WTF::base64Encode(reinterpret_cast<char*>(outp ut.data()), output.size()));
257 dataItem->setString("mimeType", "image/png"); 257 dataItem->setString("mimeType", "image/png");
258 return dataItem.release(); 258 return dataItem;
259 } 259 }
260 260
261 PassRefPtr<JSONObject> objectForSkBitmap(const SkBitmap& bitmap) 261 std::unique_ptr<JSONObject> objectForSkBitmap(const SkBitmap& bitmap)
262 { 262 {
263 RefPtr<JSONObject> bitmapItem = JSONObject::create(); 263 std::unique_ptr<JSONObject> bitmapItem = JSONObject::create();
264 bitmapItem->setNumber("width", bitmap.width()); 264 bitmapItem->setInteger("width", bitmap.width());
265 bitmapItem->setNumber("height", bitmap.height()); 265 bitmapItem->setInteger("height", bitmap.height());
266 bitmapItem->setString("config", colorTypeName(bitmap.colorType())); 266 bitmapItem->setString("config", colorTypeName(bitmap.colorType()));
267 bitmapItem->setBoolean("opaque", bitmap.isOpaque()); 267 bitmapItem->setBoolean("opaque", bitmap.isOpaque());
268 bitmapItem->setBoolean("immutable", bitmap.isImmutable()); 268 bitmapItem->setBoolean("immutable", bitmap.isImmutable());
269 bitmapItem->setBoolean("volatile", bitmap.isVolatile()); 269 bitmapItem->setBoolean("volatile", bitmap.isVolatile());
270 bitmapItem->setNumber("genID", bitmap.getGenerationID()); 270 bitmapItem->setInteger("genID", bitmap.getGenerationID());
271 bitmapItem->setObject("data", objectForBitmapData(bitmap)); 271 bitmapItem->setObject("data", objectForBitmapData(bitmap));
272 return bitmapItem.release(); 272 return bitmapItem;
273 } 273 }
274 274
275 PassRefPtr<JSONObject> objectForSkImage(const SkImage* image) 275 std::unique_ptr<JSONObject> objectForSkImage(const SkImage* image)
276 { 276 {
277 RefPtr<JSONObject> imageItem = JSONObject::create(); 277 std::unique_ptr<JSONObject> imageItem = JSONObject::create();
278 imageItem->setNumber("width", image->width()); 278 imageItem->setInteger("width", image->width());
279 imageItem->setNumber("height", image->height()); 279 imageItem->setInteger("height", image->height());
280 imageItem->setBoolean("opaque", image->isOpaque()); 280 imageItem->setBoolean("opaque", image->isOpaque());
281 imageItem->setNumber("uniqueID", image->uniqueID()); 281 imageItem->setInteger("uniqueID", image->uniqueID());
282 return imageItem.release(); 282 return imageItem;
283 } 283 }
284 284
285 PassRefPtr<JSONArray> arrayForSkMatrix(const SkMatrix& matrix) 285 std::unique_ptr<JSONArray> arrayForSkMatrix(const SkMatrix& matrix)
286 { 286 {
287 RefPtr<JSONArray> matrixArray = JSONArray::create(); 287 std::unique_ptr<JSONArray> matrixArray = JSONArray::create();
288 for (int i = 0; i < 9; ++i) 288 for (int i = 0; i < 9; ++i)
289 matrixArray->pushNumber(matrix[i]); 289 matrixArray->pushDouble(matrix[i]);
290 return matrixArray.release(); 290 return matrixArray;
291 } 291 }
292 292
293 PassRefPtr<JSONObject> objectForSkShader(const SkShader& shader) 293 std::unique_ptr<JSONObject> objectForSkShader(const SkShader& shader)
294 { 294 {
295 RefPtr<JSONObject> shaderItem = JSONObject::create(); 295 std::unique_ptr<JSONObject> shaderItem = JSONObject::create();
296 const SkMatrix localMatrix = shader.getLocalMatrix(); 296 const SkMatrix localMatrix = shader.getLocalMatrix();
297 if (!localMatrix.isIdentity()) 297 if (!localMatrix.isIdentity())
298 shaderItem->setArray("localMatrix", arrayForSkMatrix(localMatrix)); 298 shaderItem->setArray("localMatrix", arrayForSkMatrix(localMatrix));
299 return shaderItem.release(); 299 return shaderItem;
300 } 300 }
301 301
302 String stringForSkColor(const SkColor& color) 302 String stringForSkColor(const SkColor& color)
303 { 303 {
304 String colorString = "#"; 304 String colorString = "#";
305 appendUnsignedAsHex(color, colorString); 305 appendUnsignedAsHex(color, colorString);
306 return colorString; 306 return colorString;
307 } 307 }
308 308
309 void appendFlagToString(String* flagsString, bool isSet, const String& name) 309 void appendFlagToString(String* flagsString, bool isSet, const String& name)
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 case SkPaint::kNo_Hinting: return "None"; 415 case SkPaint::kNo_Hinting: return "None";
416 case SkPaint::kSlight_Hinting: return "Slight"; 416 case SkPaint::kSlight_Hinting: return "Slight";
417 case SkPaint::kNormal_Hinting: return "Normal"; 417 case SkPaint::kNormal_Hinting: return "Normal";
418 case SkPaint::kFull_Hinting: return "Full"; 418 case SkPaint::kFull_Hinting: return "Full";
419 default: 419 default:
420 ASSERT_NOT_REACHED(); 420 ASSERT_NOT_REACHED();
421 return "?"; 421 return "?";
422 }; 422 };
423 } 423 }
424 424
425 PassRefPtr<JSONObject> objectForSkPaint(const SkPaint& paint) 425 std::unique_ptr<JSONObject> objectForSkPaint(const SkPaint& paint)
426 { 426 {
427 RefPtr<JSONObject> paintItem = JSONObject::create(); 427 std::unique_ptr<JSONObject> paintItem = JSONObject::create();
428 paintItem->setNumber("textSize", paint.getTextSize()); 428 paintItem->setDouble("textSize", paint.getTextSize());
429 paintItem->setNumber("textScaleX", paint.getTextScaleX()); 429 paintItem->setDouble("textScaleX", paint.getTextScaleX());
430 paintItem->setNumber("textSkewX", paint.getTextSkewX()); 430 paintItem->setDouble("textSkewX", paint.getTextSkewX());
431 if (SkShader* shader = paint.getShader()) 431 if (SkShader* shader = paint.getShader())
432 paintItem->setObject("shader", objectForSkShader(*shader)); 432 paintItem->setObject("shader", objectForSkShader(*shader));
433 paintItem->setString("color", stringForSkColor(paint.getColor())); 433 paintItem->setString("color", stringForSkColor(paint.getColor()));
434 paintItem->setNumber("strokeWidth", paint.getStrokeWidth()); 434 paintItem->setDouble("strokeWidth", paint.getStrokeWidth());
435 paintItem->setNumber("strokeMiter", paint.getStrokeMiter()); 435 paintItem->setDouble("strokeMiter", paint.getStrokeMiter());
436 paintItem->setString("flags", stringForSkPaintFlags(paint)); 436 paintItem->setString("flags", stringForSkPaintFlags(paint));
437 paintItem->setString("filterLevel", filterQualityName(paint.getFilterQuality ())); 437 paintItem->setString("filterLevel", filterQualityName(paint.getFilterQuality ()));
438 paintItem->setString("textAlign", textAlignName(paint.getTextAlign())); 438 paintItem->setString("textAlign", textAlignName(paint.getTextAlign()));
439 paintItem->setString("strokeCap", strokeCapName(paint.getStrokeCap())); 439 paintItem->setString("strokeCap", strokeCapName(paint.getStrokeCap()));
440 paintItem->setString("strokeJoin", strokeJoinName(paint.getStrokeJoin())); 440 paintItem->setString("strokeJoin", strokeJoinName(paint.getStrokeJoin()));
441 paintItem->setString("styleName", styleName(paint.getStyle())); 441 paintItem->setString("styleName", styleName(paint.getStyle()));
442 paintItem->setString("textEncoding", textEncodingName(paint.getTextEncoding( ))); 442 paintItem->setString("textEncoding", textEncodingName(paint.getTextEncoding( )));
443 paintItem->setString("hinting", hintingName(paint.getHinting())); 443 paintItem->setString("hinting", hintingName(paint.getHinting()));
444 return paintItem.release(); 444 return paintItem;
445 } 445 }
446 446
447 PassRefPtr<JSONArray> arrayForSkScalars(size_t n, const SkScalar scalars[]) 447 std::unique_ptr<JSONArray> arrayForSkScalars(size_t n, const SkScalar scalars[])
448 { 448 {
449 RefPtr<JSONArray> scalarsArray = JSONArray::create(); 449 std::unique_ptr<JSONArray> scalarsArray = JSONArray::create();
450 for (size_t i = 0; i < n; ++i) 450 for (size_t i = 0; i < n; ++i)
451 scalarsArray->pushNumber(scalars[i]); 451 scalarsArray->pushDouble(scalars[i]);
452 return scalarsArray.release(); 452 return scalarsArray;
453 } 453 }
454 454
455 String regionOpName(SkRegion::Op op) 455 String regionOpName(SkRegion::Op op)
456 { 456 {
457 switch (op) { 457 switch (op) {
458 case SkRegion::kDifference_Op: return "kDifference_Op"; 458 case SkRegion::kDifference_Op: return "kDifference_Op";
459 case SkRegion::kIntersect_Op: return "kIntersect_Op"; 459 case SkRegion::kIntersect_Op: return "kIntersect_Op";
460 case SkRegion::kUnion_Op: return "kUnion_Op"; 460 case SkRegion::kUnion_Op: return "kUnion_Op";
461 case SkRegion::kXOR_Op: return "kXOR_Op"; 461 case SkRegion::kXOR_Op: return "kXOR_Op";
462 case SkRegion::kReverseDifference_Op: return "kReverseDifference_Op"; 462 case SkRegion::kReverseDifference_Op: return "kReverseDifference_Op";
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 return "?"; 507 return "?";
508 } 508 }
509 } 509 }
510 510
511 } // namespace 511 } // namespace
512 512
513 class AutoLogger : InterceptingCanvasBase::CanvasInterceptorBase<LoggingCanvas> { 513 class AutoLogger : InterceptingCanvasBase::CanvasInterceptorBase<LoggingCanvas> {
514 public: 514 public:
515 explicit AutoLogger(LoggingCanvas* canvas) : InterceptingCanvasBase::CanvasI nterceptorBase<LoggingCanvas>(canvas) { } 515 explicit AutoLogger(LoggingCanvas* canvas) : InterceptingCanvasBase::CanvasI nterceptorBase<LoggingCanvas>(canvas) { }
516 516
517 PassRefPtr<JSONObject> logItem(const String& name); 517 JSONObject* logItem(const String& name);
518 PassRefPtr<JSONObject> logItemWithParams(const String& name); 518 JSONObject* logItemWithParams(const String& name);
519 ~AutoLogger() 519 ~AutoLogger()
520 { 520 {
521 if (topLevelCall()) 521 if (topLevelCall())
522 canvas()->m_log->pushObject(m_logItem); 522 canvas()->m_log->pushObject(std::move(m_logItem));
523 } 523 }
524 524
525 private: 525 private:
526 RefPtr<JSONObject> m_logItem; 526 std::unique_ptr<JSONObject> m_logItem;
527 }; 527 };
528 528
529 PassRefPtr<JSONObject> AutoLogger::logItem(const String& name) 529 JSONObject* AutoLogger::logItem(const String& name)
530 { 530 {
531 RefPtr<JSONObject> item = JSONObject::create(); 531 std::unique_ptr<JSONObject> item = JSONObject::create();
532 item->setString("method", name); 532 item->setString("method", name);
533 m_logItem = item; 533 m_logItem = std::move(item);
534 return item.release(); 534 return m_logItem.get();
535 } 535 }
536 536
537 PassRefPtr<JSONObject> AutoLogger::logItemWithParams(const String& name) 537 JSONObject* AutoLogger::logItemWithParams(const String& name)
538 { 538 {
539 RefPtr<JSONObject> item = logItem(name); 539 JSONObject* item = logItem(name);
540 RefPtr<JSONObject> params = JSONObject::create(); 540 std::unique_ptr<JSONObject> params = JSONObject::create();
541 item->setObject("params", params); 541 item->setObject("params", std::move(params));
542 return params.release(); 542 return item->getObject("params");
543 } 543 }
544 544
545 LoggingCanvas::LoggingCanvas(int width, int height) 545 LoggingCanvas::LoggingCanvas(int width, int height)
546 : InterceptingCanvasBase(width, height) 546 : InterceptingCanvasBase(width, height)
547 , m_log(JSONArray::create()) 547 , m_log(JSONArray::create())
548 { 548 {
549 } 549 }
550 550
551 void LoggingCanvas::onDrawPaint(const SkPaint& paint) 551 void LoggingCanvas::onDrawPaint(const SkPaint& paint)
552 { 552 {
553 AutoLogger logger(this); 553 AutoLogger logger(this);
554 logger.logItemWithParams("drawPaint")->setObject("paint", objectForSkPaint(p aint)); 554 logger.logItemWithParams("drawPaint")->setObject("paint", objectForSkPaint(p aint));
555 this->SkCanvas::onDrawPaint(paint); 555 this->SkCanvas::onDrawPaint(paint);
556 } 556 }
557 557
558 void LoggingCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts [], const SkPaint& paint) 558 void LoggingCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts [], const SkPaint& paint)
559 { 559 {
560 AutoLogger logger(this); 560 AutoLogger logger(this);
561 RefPtr<JSONObject> params = logger.logItemWithParams("drawPoints"); 561 JSONObject* params = logger.logItemWithParams("drawPoints");
562 params->setString("pointMode", pointModeName(mode)); 562 params->setString("pointMode", pointModeName(mode));
563 params->setArray("points", arrayForSkPoints(count, pts)); 563 params->setArray("points", arrayForSkPoints(count, pts));
564 params->setObject("paint", objectForSkPaint(paint)); 564 params->setObject("paint", objectForSkPaint(paint));
565 this->SkCanvas::onDrawPoints(mode, count, pts, paint); 565 this->SkCanvas::onDrawPoints(mode, count, pts, paint);
566 } 566 }
567 567
568 void LoggingCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) 568 void LoggingCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint)
569 { 569 {
570 AutoLogger logger(this); 570 AutoLogger logger(this);
571 RefPtr<JSONObject> params = logger.logItemWithParams("drawRect"); 571 JSONObject* params = logger.logItemWithParams("drawRect");
572 params->setObject("rect", objectForSkRect(rect)); 572 params->setObject("rect", objectForSkRect(rect));
573 params->setObject("paint", objectForSkPaint(paint)); 573 params->setObject("paint", objectForSkPaint(paint));
574 this->SkCanvas::onDrawRect(rect, paint); 574 this->SkCanvas::onDrawRect(rect, paint);
575 } 575 }
576 576
577 void LoggingCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) 577 void LoggingCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint)
578 { 578 {
579 AutoLogger logger(this); 579 AutoLogger logger(this);
580 RefPtr<JSONObject> params = logger.logItemWithParams("drawOval"); 580 JSONObject* params = logger.logItemWithParams("drawOval");
581 params->setObject("oval", objectForSkRect(oval)); 581 params->setObject("oval", objectForSkRect(oval));
582 params->setObject("paint", objectForSkPaint(paint)); 582 params->setObject("paint", objectForSkPaint(paint));
583 this->SkCanvas::onDrawOval(oval, paint); 583 this->SkCanvas::onDrawOval(oval, paint);
584 } 584 }
585 585
586 void LoggingCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) 586 void LoggingCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint)
587 { 587 {
588 AutoLogger logger(this); 588 AutoLogger logger(this);
589 RefPtr<JSONObject> params = logger.logItemWithParams("drawRRect"); 589 JSONObject* params = logger.logItemWithParams("drawRRect");
590 params->setObject("rrect", objectForSkRRect(rrect)); 590 params->setObject("rrect", objectForSkRRect(rrect));
591 params->setObject("paint", objectForSkPaint(paint)); 591 params->setObject("paint", objectForSkPaint(paint));
592 this->SkCanvas::onDrawRRect(rrect, paint); 592 this->SkCanvas::onDrawRRect(rrect, paint);
593 } 593 }
594 594
595 void LoggingCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) 595 void LoggingCanvas::onDrawPath(const SkPath& path, const SkPaint& paint)
596 { 596 {
597 AutoLogger logger(this); 597 AutoLogger logger(this);
598 RefPtr<JSONObject> params = logger.logItemWithParams("drawPath"); 598 JSONObject* params = logger.logItemWithParams("drawPath");
599 params->setObject("path", objectForSkPath(path)); 599 params->setObject("path", objectForSkPath(path));
600 params->setObject("paint", objectForSkPaint(paint)); 600 params->setObject("paint", objectForSkPaint(paint));
601 this->SkCanvas::onDrawPath(path, paint); 601 this->SkCanvas::onDrawPath(path, paint);
602 } 602 }
603 603
604 void LoggingCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint) 604 void LoggingCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, const SkPaint* paint)
605 { 605 {
606 AutoLogger logger(this); 606 AutoLogger logger(this);
607 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmap"); 607 JSONObject* params = logger.logItemWithParams("drawBitmap");
608 params->setNumber("left", left); 608 params->setDouble("left", left);
609 params->setNumber("top", top); 609 params->setDouble("top", top);
610 params->setObject("bitmap", objectForSkBitmap(bitmap)); 610 params->setObject("bitmap", objectForSkBitmap(bitmap));
611 if (paint) 611 if (paint)
612 params->setObject("paint", objectForSkPaint(*paint)); 612 params->setObject("paint", objectForSkPaint(*paint));
613 this->SkCanvas::onDrawBitmap(bitmap, left, top, paint); 613 this->SkCanvas::onDrawBitmap(bitmap, left, top, paint);
614 } 614 }
615 615
616 void LoggingCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) 616 void LoggingCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint)
617 { 617 {
618 AutoLogger logger(this); 618 AutoLogger logger(this);
619 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapRectToRect") ; 619 JSONObject* params = logger.logItemWithParams("drawBitmapRectToRect");
620 params->setObject("bitmap", objectForSkBitmap(bitmap)); 620 params->setObject("bitmap", objectForSkBitmap(bitmap));
621 if (src) 621 if (src)
622 params->setObject("src", objectForSkRect(*src)); 622 params->setObject("src", objectForSkRect(*src));
623 params->setObject("dst", objectForSkRect(dst)); 623 params->setObject("dst", objectForSkRect(dst));
624 if (paint) 624 if (paint)
625 params->setObject("paint", objectForSkPaint(*paint)); 625 params->setObject("paint", objectForSkPaint(*paint));
626 params->setNumber("flags", constraint); 626 params->setInteger("flags", constraint);
627 this->SkCanvas::onDrawBitmapRect(bitmap, src, dst, paint, constraint); 627 this->SkCanvas::onDrawBitmapRect(bitmap, src, dst, paint, constraint);
628 } 628 }
629 629
630 void LoggingCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent er, const SkRect& dst, const SkPaint* paint) 630 void LoggingCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& cent er, const SkRect& dst, const SkPaint* paint)
631 { 631 {
632 AutoLogger logger(this); 632 AutoLogger logger(this);
633 RefPtr<JSONObject> params = logger.logItemWithParams("drawBitmapNine"); 633 JSONObject* params = logger.logItemWithParams("drawBitmapNine");
634 params->setObject("bitmap", objectForSkBitmap(bitmap)); 634 params->setObject("bitmap", objectForSkBitmap(bitmap));
635 params->setObject("center", objectForSkIRect(center)); 635 params->setObject("center", objectForSkIRect(center));
636 params->setObject("dst", objectForSkRect(dst)); 636 params->setObject("dst", objectForSkRect(dst));
637 if (paint) 637 if (paint)
638 params->setObject("paint", objectForSkPaint(*paint)); 638 params->setObject("paint", objectForSkPaint(*paint));
639 this->SkCanvas::onDrawBitmapNine(bitmap, center, dst, paint); 639 this->SkCanvas::onDrawBitmapNine(bitmap, center, dst, paint);
640 } 640 }
641 641
642 void LoggingCanvas::onDrawImage(const SkImage* image, SkScalar left, SkScalar to p, const SkPaint* paint) 642 void LoggingCanvas::onDrawImage(const SkImage* image, SkScalar left, SkScalar to p, const SkPaint* paint)
643 { 643 {
644 AutoLogger logger(this); 644 AutoLogger logger(this);
645 RefPtr<JSONObject> params = logger.logItemWithParams("drawImage"); 645 JSONObject* params = logger.logItemWithParams("drawImage");
646 params->setNumber("left", left); 646 params->setDouble("left", left);
647 params->setNumber("top", top); 647 params->setDouble("top", top);
648 params->setObject("image", objectForSkImage(image)); 648 params->setObject("image", objectForSkImage(image));
649 if (paint) 649 if (paint)
650 params->setObject("paint", objectForSkPaint(*paint)); 650 params->setObject("paint", objectForSkPaint(*paint));
651 this->SkCanvas::onDrawImage(image, left, top, paint); 651 this->SkCanvas::onDrawImage(image, left, top, paint);
652 } 652 }
653 653
654 void LoggingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, con st SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint) 654 void LoggingCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, con st SkRect& dst, const SkPaint* paint, SrcRectConstraint constraint)
655 { 655 {
656 AutoLogger logger(this); 656 AutoLogger logger(this);
657 RefPtr<JSONObject> params = logger.logItemWithParams("drawImageRect"); 657 JSONObject* params = logger.logItemWithParams("drawImageRect");
658 params->setObject("image", objectForSkImage(image)); 658 params->setObject("image", objectForSkImage(image));
659 if (src) 659 if (src)
660 params->setObject("src", objectForSkRect(*src)); 660 params->setObject("src", objectForSkRect(*src));
661 params->setObject("dst", objectForSkRect(dst)); 661 params->setObject("dst", objectForSkRect(dst));
662 if (paint) 662 if (paint)
663 params->setObject("paint", objectForSkPaint(*paint)); 663 params->setObject("paint", objectForSkPaint(*paint));
664 this->SkCanvas::onDrawImageRect(image, src, dst, paint, constraint); 664 this->SkCanvas::onDrawImageRect(image, src, dst, paint, constraint);
665 } 665 }
666 666
667 void LoggingCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPo int vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode, 667 void LoggingCanvas::onDrawVertices(VertexMode vmode, int vertexCount, const SkPo int vertices[], const SkPoint texs[], const SkColor colors[], SkXfermode* xmode,
668 const uint16_t indices[], int indexCount, const SkPaint& paint) 668 const uint16_t indices[], int indexCount, const SkPaint& paint)
669 { 669 {
670 AutoLogger logger(this); 670 AutoLogger logger(this);
671 RefPtr<JSONObject> params = logger.logItemWithParams("drawVertices"); 671 JSONObject* params = logger.logItemWithParams("drawVertices");
672 params->setObject("paint", objectForSkPaint(paint)); 672 params->setObject("paint", objectForSkPaint(paint));
673 this->SkCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, x mode, indices, indexCount, paint); 673 this->SkCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors, x mode, indices, indexCount, paint);
674 } 674 }
675 675
676 void LoggingCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, con st SkPaint& paint) 676 void LoggingCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, con st SkPaint& paint)
677 { 677 {
678 AutoLogger logger(this); 678 AutoLogger logger(this);
679 RefPtr<JSONObject> params = logger.logItemWithParams("drawDRRect"); 679 JSONObject* params = logger.logItemWithParams("drawDRRect");
680 params->setObject("outer", objectForSkRRect(outer)); 680 params->setObject("outer", objectForSkRRect(outer));
681 params->setObject("inner", objectForSkRRect(inner)); 681 params->setObject("inner", objectForSkRRect(inner));
682 params->setObject("paint", objectForSkPaint(paint)); 682 params->setObject("paint", objectForSkPaint(paint));
683 this->SkCanvas::onDrawDRRect(outer, inner, paint); 683 this->SkCanvas::onDrawDRRect(outer, inner, paint);
684 } 684 }
685 685
686 void LoggingCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) 686 void LoggingCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint)
687 { 687 {
688 AutoLogger logger(this); 688 AutoLogger logger(this);
689 RefPtr<JSONObject> params = logger.logItemWithParams("drawText"); 689 JSONObject* params = logger.logItemWithParams("drawText");
690 params->setString("text", stringForText(text, byteLength, paint)); 690 params->setString("text", stringForText(text, byteLength, paint));
691 params->setNumber("x", x); 691 params->setDouble("x", x);
692 params->setNumber("y", y); 692 params->setDouble("y", y);
693 params->setObject("paint", objectForSkPaint(paint)); 693 params->setObject("paint", objectForSkPaint(paint));
694 this->SkCanvas::onDrawText(text, byteLength, x, y, paint); 694 this->SkCanvas::onDrawText(text, byteLength, x, y, paint);
695 } 695 }
696 696
697 void LoggingCanvas::onDrawPosText(const void* text, size_t byteLength, const SkP oint pos[], const SkPaint& paint) 697 void LoggingCanvas::onDrawPosText(const void* text, size_t byteLength, const SkP oint pos[], const SkPaint& paint)
698 { 698 {
699 AutoLogger logger(this); 699 AutoLogger logger(this);
700 RefPtr<JSONObject> params = logger.logItemWithParams("drawPosText"); 700 JSONObject* params = logger.logItemWithParams("drawPosText");
701 params->setString("text", stringForText(text, byteLength, paint)); 701 params->setString("text", stringForText(text, byteLength, paint));
702 size_t pointsCount = paint.countText(text, byteLength); 702 size_t pointsCount = paint.countText(text, byteLength);
703 params->setArray("pos", arrayForSkPoints(pointsCount, pos)); 703 params->setArray("pos", arrayForSkPoints(pointsCount, pos));
704 params->setObject("paint", objectForSkPaint(paint)); 704 params->setObject("paint", objectForSkPaint(paint));
705 this->SkCanvas::onDrawPosText(text, byteLength, pos, paint); 705 this->SkCanvas::onDrawPosText(text, byteLength, pos, paint);
706 } 706 }
707 707
708 void LoggingCanvas::onDrawPosTextH(const void* text, size_t byteLength, const Sk Scalar xpos[], SkScalar constY, const SkPaint& paint) 708 void LoggingCanvas::onDrawPosTextH(const void* text, size_t byteLength, const Sk Scalar xpos[], SkScalar constY, const SkPaint& paint)
709 { 709 {
710 AutoLogger logger(this); 710 AutoLogger logger(this);
711 RefPtr<JSONObject> params = logger.logItemWithParams("drawPosTextH"); 711 JSONObject* params = logger.logItemWithParams("drawPosTextH");
712 params->setString("text", stringForText(text, byteLength, paint)); 712 params->setString("text", stringForText(text, byteLength, paint));
713 size_t pointsCount = paint.countText(text, byteLength); 713 size_t pointsCount = paint.countText(text, byteLength);
714 params->setArray("xpos", arrayForSkScalars(pointsCount, xpos)); 714 params->setArray("xpos", arrayForSkScalars(pointsCount, xpos));
715 params->setNumber("constY", constY); 715 params->setDouble("constY", constY);
716 params->setObject("paint", objectForSkPaint(paint)); 716 params->setObject("paint", objectForSkPaint(paint));
717 this->SkCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint); 717 this->SkCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint);
718 } 718 }
719 719
720 void LoggingCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) 720 void LoggingCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint)
721 { 721 {
722 AutoLogger logger(this); 722 AutoLogger logger(this);
723 RefPtr<JSONObject> params = logger.logItemWithParams("drawTextOnPath"); 723 JSONObject* params = logger.logItemWithParams("drawTextOnPath");
724 params->setString("text", stringForText(text, byteLength, paint)); 724 params->setString("text", stringForText(text, byteLength, paint));
725 params->setObject("path", objectForSkPath(path)); 725 params->setObject("path", objectForSkPath(path));
726 if (matrix) 726 if (matrix)
727 params->setArray("matrix", arrayForSkMatrix(*matrix)); 727 params->setArray("matrix", arrayForSkMatrix(*matrix));
728 params->setObject("paint", objectForSkPaint(paint)); 728 params->setObject("paint", objectForSkPaint(paint));
729 this->SkCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint); 729 this->SkCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint);
730 } 730 }
731 731
732 void LoggingCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y, const SkPaint &paint) 732 void LoggingCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y, const SkPaint &paint)
733 { 733 {
734 AutoLogger logger(this); 734 AutoLogger logger(this);
735 RefPtr<JSONObject> params = logger.logItemWithParams("drawTextBlob"); 735 JSONObject* params = logger.logItemWithParams("drawTextBlob");
736 params->setNumber("x", x); 736 params->setDouble("x", x);
737 params->setNumber("y", y); 737 params->setDouble("y", y);
738 params->setObject("paint", objectForSkPaint(paint)); 738 params->setObject("paint", objectForSkPaint(paint));
739 this->SkCanvas::onDrawTextBlob(blob, x, y, paint); 739 this->SkCanvas::onDrawTextBlob(blob, x, y, paint);
740 } 740 }
741 741
742 void LoggingCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl e style) 742 void LoggingCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyl e style)
743 { 743 {
744 AutoLogger logger(this); 744 AutoLogger logger(this);
745 RefPtr<JSONObject> params = logger.logItemWithParams("clipRect"); 745 JSONObject* params = logger.logItemWithParams("clipRect");
746 params->setObject("rect", objectForSkRect(rect)); 746 params->setObject("rect", objectForSkRect(rect));
747 params->setString("SkRegion::Op", regionOpName(op)); 747 params->setString("SkRegion::Op", regionOpName(op));
748 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); 748 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
749 this->SkCanvas::onClipRect(rect, op, style); 749 this->SkCanvas::onClipRect(rect, op, style);
750 } 750 }
751 751
752 void LoggingCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeS tyle style) 752 void LoggingCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeS tyle style)
753 { 753 {
754 AutoLogger logger(this); 754 AutoLogger logger(this);
755 RefPtr<JSONObject> params = logger.logItemWithParams("clipRRect"); 755 JSONObject* params = logger.logItemWithParams("clipRRect");
756 params->setObject("rrect", objectForSkRRect(rrect)); 756 params->setObject("rrect", objectForSkRRect(rrect));
757 params->setString("SkRegion::Op", regionOpName(op)); 757 params->setString("SkRegion::Op", regionOpName(op));
758 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); 758 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
759 this->SkCanvas::onClipRRect(rrect, op, style); 759 this->SkCanvas::onClipRRect(rrect, op, style);
760 } 760 }
761 761
762 void LoggingCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl e style) 762 void LoggingCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyl e style)
763 { 763 {
764 AutoLogger logger(this); 764 AutoLogger logger(this);
765 RefPtr<JSONObject> params = logger.logItemWithParams("clipPath"); 765 JSONObject* params = logger.logItemWithParams("clipPath");
766 params->setObject("path", objectForSkPath(path)); 766 params->setObject("path", objectForSkPath(path));
767 params->setString("SkRegion::Op", regionOpName(op)); 767 params->setString("SkRegion::Op", regionOpName(op));
768 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style); 768 params->setBoolean("softClipEdgeStyle", kSoft_ClipEdgeStyle == style);
769 this->SkCanvas::onClipPath(path, op, style); 769 this->SkCanvas::onClipPath(path, op, style);
770 } 770 }
771 771
772 void LoggingCanvas::onClipRegion(const SkRegion& region, SkRegion::Op op) 772 void LoggingCanvas::onClipRegion(const SkRegion& region, SkRegion::Op op)
773 { 773 {
774 AutoLogger logger(this); 774 AutoLogger logger(this);
775 RefPtr<JSONObject> params = logger.logItemWithParams("clipRegion"); 775 JSONObject* params = logger.logItemWithParams("clipRegion");
776 params->setString("op", regionOpName(op)); 776 params->setString("op", regionOpName(op));
777 this->SkCanvas::onClipRegion(region, op); 777 this->SkCanvas::onClipRegion(region, op);
778 } 778 }
779 779
780 void LoggingCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matr ix, const SkPaint* paint) 780 void LoggingCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matr ix, const SkPaint* paint)
781 { 781 {
782 this->unrollDrawPicture(picture, matrix, paint, nullptr); 782 this->unrollDrawPicture(picture, matrix, paint, nullptr);
783 } 783 }
784 784
785 void LoggingCanvas::didSetMatrix(const SkMatrix& matrix) 785 void LoggingCanvas::didSetMatrix(const SkMatrix& matrix)
786 { 786 {
787 AutoLogger logger(this); 787 AutoLogger logger(this);
788 RefPtr<JSONObject> params = logger.logItemWithParams("setMatrix"); 788 JSONObject* params = logger.logItemWithParams("setMatrix");
789 params->setArray("matrix", arrayForSkMatrix(matrix)); 789 params->setArray("matrix", arrayForSkMatrix(matrix));
790 this->SkCanvas::didSetMatrix(matrix); 790 this->SkCanvas::didSetMatrix(matrix);
791 } 791 }
792 792
793 void LoggingCanvas::didConcat(const SkMatrix& matrix) 793 void LoggingCanvas::didConcat(const SkMatrix& matrix)
794 { 794 {
795 AutoLogger logger(this); 795 AutoLogger logger(this);
796 RefPtr<JSONObject> params; 796 JSONObject* params;
797 797
798 switch (matrix.getType()) { 798 switch (matrix.getType()) {
799 case SkMatrix::kTranslate_Mask: 799 case SkMatrix::kTranslate_Mask:
800 params = logger.logItemWithParams("translate"); 800 params = logger.logItemWithParams("translate");
801 params->setNumber("dx", matrix.getTranslateX()); 801 params->setDouble("dx", matrix.getTranslateX());
802 params->setNumber("dy", matrix.getTranslateY()); 802 params->setDouble("dy", matrix.getTranslateY());
803 break; 803 break;
804 804
805 case SkMatrix::kScale_Mask: 805 case SkMatrix::kScale_Mask:
806 params = logger.logItemWithParams("scale"); 806 params = logger.logItemWithParams("scale");
807 params->setNumber("scaleX", matrix.getScaleX()); 807 params->setDouble("scaleX", matrix.getScaleX());
808 params->setNumber("scaleY", matrix.getScaleY()); 808 params->setDouble("scaleY", matrix.getScaleY());
809 break; 809 break;
810 810
811 default: 811 default:
812 params = logger.logItemWithParams("concat"); 812 params = logger.logItemWithParams("concat");
813 params->setArray("matrix", arrayForSkMatrix(matrix)); 813 params->setArray("matrix", arrayForSkMatrix(matrix));
814 } 814 }
815 this->SkCanvas::didConcat(matrix); 815 this->SkCanvas::didConcat(matrix);
816 } 816 }
817 817
818 void LoggingCanvas::willSave() 818 void LoggingCanvas::willSave()
819 { 819 {
820 AutoLogger logger(this); 820 AutoLogger logger(this);
821 RefPtr<JSONObject> params = logger.logItem("save"); 821 logger.logItem("save");
822 this->SkCanvas::willSave(); 822 this->SkCanvas::willSave();
823 } 823 }
824 824
825 SkCanvas::SaveLayerStrategy LoggingCanvas::getSaveLayerStrategy(const SaveLayerR ec& rec) 825 SkCanvas::SaveLayerStrategy LoggingCanvas::getSaveLayerStrategy(const SaveLayerR ec& rec)
826 { 826 {
827 AutoLogger logger(this); 827 AutoLogger logger(this);
828 RefPtr<JSONObject> params = logger.logItemWithParams("saveLayer"); 828 JSONObject* params = logger.logItemWithParams("saveLayer");
829 if (rec.fBounds) 829 if (rec.fBounds)
830 params->setObject("bounds", objectForSkRect(*rec.fBounds)); 830 params->setObject("bounds", objectForSkRect(*rec.fBounds));
831 if (rec.fPaint) 831 if (rec.fPaint)
832 params->setObject("paint", objectForSkPaint(*rec.fPaint)); 832 params->setObject("paint", objectForSkPaint(*rec.fPaint));
833 params->setString("saveFlags", saveLayerFlagsToString(rec.fSaveLayerFlags)); 833 params->setString("saveFlags", saveLayerFlagsToString(rec.fSaveLayerFlags));
834 return this->SkCanvas::getSaveLayerStrategy(rec); 834 return this->SkCanvas::getSaveLayerStrategy(rec);
835 } 835 }
836 836
837 void LoggingCanvas::willRestore() 837 void LoggingCanvas::willRestore()
838 { 838 {
839 AutoLogger logger(this); 839 AutoLogger logger(this);
840 logger.logItem("restore"); 840 logger.logItem("restore");
841 this->SkCanvas::willRestore(); 841 this->SkCanvas::willRestore();
842 } 842 }
843 843
844 PassRefPtr<JSONArray> LoggingCanvas::log() 844 std::unique_ptr<JSONArray> LoggingCanvas::log()
845 { 845 {
846 return m_log; 846 return JSONArray::cast(m_log->clone());
847 } 847 }
848 848
849 #ifndef NDEBUG 849 #ifndef NDEBUG
850 String pictureAsDebugString(const SkPicture* picture) 850 String pictureAsDebugString(const SkPicture* picture)
851 { 851 {
852 const SkIRect bounds = picture->cullRect().roundOut(); 852 const SkIRect bounds = picture->cullRect().roundOut();
853 LoggingCanvas canvas(bounds.width(), bounds.height()); 853 LoggingCanvas canvas(bounds.width(), bounds.height());
854 picture->playback(&canvas); 854 picture->playback(&canvas);
855 RefPtr<JSONObject> pictureAsJSON = JSONObject::create(); 855 std::unique_ptr<JSONObject> pictureAsJSON = JSONObject::create();
856 pictureAsJSON->setObject("cullRect", objectForSkRect(picture->cullRect())); 856 pictureAsJSON->setObject("cullRect", objectForSkRect(picture->cullRect()));
857 pictureAsJSON->setArray("operations", canvas.log()); 857 pictureAsJSON->setArray("operations", canvas.log());
858 RefPtr<JSONArray> operationsInJson = canvas.log();
859 return pictureAsJSON->toPrettyJSONString(); 858 return pictureAsJSON->toPrettyJSONString();
860 } 859 }
861 860
862 void showSkPicture(const SkPicture* picture) 861 void showSkPicture(const SkPicture* picture)
863 { 862 {
864 WTFLogAlways("%s\n", pictureAsDebugString(picture).utf8().data()); 863 WTFLogAlways("%s\n", pictureAsDebugString(picture).utf8().data());
865 } 864 }
866 #endif 865 #endif
867 866
868 } // namespace blink 867 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698