diff options
author | joshualitt <joshualitt@chromium.org> | 2016-02-25 11:28:18 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-25 11:28:18 -0800 |
commit | 3854f11ce35857ccb6dbf8bb09bef9252543090f (patch) | |
tree | 1adacad85f2835c68ea50136bbad3084a3da40ea /tools/skiaserve/urlhandlers/InfoHandler.cpp | |
parent | f57b3a6e4a002caf01378832cbd756c6c163a783 (diff) |
Move urlhandlers out of skiaserve.cpp
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1737643003
Review URL: https://codereview.chromium.org/1737643003
Diffstat (limited to 'tools/skiaserve/urlhandlers/InfoHandler.cpp')
-rw-r--r-- | tools/skiaserve/urlhandlers/InfoHandler.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/skiaserve/urlhandlers/InfoHandler.cpp b/tools/skiaserve/urlhandlers/InfoHandler.cpp new file mode 100644 index 0000000000..16dbefb415 --- /dev/null +++ b/tools/skiaserve/urlhandlers/InfoHandler.cpp @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "UrlHandler.h" + +#include "microhttpd.h" +#include "SkJSONCanvas.h" +#include "../Request.h" +#include "../Response.h" + +using namespace Response; + +bool InfoHandler::canHandle(const char* method, const char* url) { + const char* kBaseName = "/info"; + return 0 == strcmp(method, MHD_HTTP_METHOD_GET) && + 0 == strncmp(url, kBaseName, strlen(kBaseName)); +} + +int InfoHandler::handle(Request* request, MHD_Connection* connection, + const char* url, const char* method, + const char* upload_data, size_t* upload_data_size) { + SkTArray<SkString> commands; + SkStrSplit(url, "/", &commands); + + if (!request->fPicture.get() || commands.count() > 2) { + return MHD_NO; + } + + // drawTo + SkAutoTUnref<SkSurface> surface(request->createCPUSurface()); + SkCanvas* canvas = surface->getCanvas(); + + int n; + // /info or /info/N + if (commands.count() == 1) { + n = request->fDebugCanvas->getSize() - 1; + } else { + sscanf(commands[1].c_str(), "%d", &n); + } + + // TODO this is really slow and we should cache the matrix and clip + request->fDebugCanvas->drawTo(canvas, n); + + // make some json + SkMatrix vm = request->fDebugCanvas->getCurrentMatrix(); + SkIRect clip = request->fDebugCanvas->getCurrentClip(); + Json::Value info(Json::objectValue); + info["ViewMatrix"] = SkJSONCanvas::MakeMatrix(vm); + info["ClipRect"] = SkJSONCanvas::MakeIRect(clip); + + std::string json = Json::FastWriter().write(info); + + // We don't want the null terminator so strlen is correct + SkAutoTUnref<SkData> data(SkData::NewWithCopy(json.c_str(), strlen(json.c_str()))); + return SendData(connection, data, "application/json"); +} + |