PassRefPtr<JSONObject> LoggingCanvas::objectForSkPath(const SkPath& path) { RefPtr<JSONObject> pathItem = JSONObject::create(); pathItem->setString("fillType", fillTypeName(path.getFillType())); pathItem->setString("convexity", convexityName(path.getConvexity())); pathItem->setBoolean("isRect", path.isRect(0)); SkPath::Iter iter(path, false); SkPoint points[4]; RefPtr<JSONArray> pathPointsArray = JSONArray::create(); for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Verb; verb = iter.next(points, false)) { VerbParams verbParams = segmentParams(verb); RefPtr<JSONObject> pathPointItem = JSONObject::create(); pathPointItem->setString("verb", verbParams.name); ASSERT(verbParams.pointCount + verbParams.pointOffset <= WTF_ARRAY_LENGTH(points)); pathPointItem->setArray("points", arrayForSkPoints(verbParams.pointCount, points + verbParams.pointOffset)); if (SkPath::kConic_Verb == verb) pathPointItem->setNumber("conicWeight", iter.conicWeight()); pathPointsArray->pushObject(pathPointItem); } pathItem->setArray("pathPoints", pathPointsArray); pathItem->setObject("bounds", objectForSkRect(path.getBounds())); return pathItem.release(); }