/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Helper functions for result writing operations. */ #include "ResultsWriter.h" #include "SkString.h" #include "SkTArray.h" Json::Value* SkFindNamedNode(Json::Value* root, const char name[]) { Json::Value* search_results = NULL; for(Json::Value::iterator iter = root->begin(); iter!= root->end(); ++iter) { if(SkString(name).equals((*iter)["name"].asCString())) { search_results = &(*iter); break; } } if(search_results != NULL) { return search_results; } else { Json::Value* new_val = &(root->append(Json::Value())); (*new_val)["name"] = name; return new_val; } } Json::Value SkMakeBuilderJSON(const SkString &builderName) { static const int kNumKeys = 6; static const char* kKeys[kNumKeys] = { "role", "os", "model", "gpu", "arch", "configuration"}; Json::Value builderData; if (!builderName.isEmpty()) { SkTArray splitBuilder; SkStrSplit(builderName.c_str(), "-", &splitBuilder); SkASSERT(splitBuilder.count() >= kNumKeys); for (int i = 0; i < kNumKeys && i < splitBuilder.count(); ++i) { builderData[kKeys[i]] = splitBuilder[i].c_str(); } builderData["builderName"] = builderName.c_str(); if (kNumKeys < splitBuilder.count()) { SkString extras; for (int i = kNumKeys; i < splitBuilder.count(); ++i) { extras.append(splitBuilder[i]); if (i != splitBuilder.count() - 1) { extras.append("-"); } } builderData["badParams"] = extras.c_str(); } } return builderData; }