124dd687ac5f7afb44d593d793180f115f7c68b68joshualitt/*
224dd687ac5f7afb44d593d793180f115f7c68b68joshualitt * Copyright 2016 Google Inc.
324dd687ac5f7afb44d593d793180f115f7c68b68joshualitt *
424dd687ac5f7afb44d593d793180f115f7c68b68joshualitt * Use of this source code is governed by a BSD-style license that can be
524dd687ac5f7afb44d593d793180f115f7c68b68joshualitt * found in the LICENSE file.
624dd687ac5f7afb44d593d793180f115f7c68b68joshualitt */
724dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
824dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#ifndef Request_DEFINED
924dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#define Request_DEFINED
1024dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
11ecbc526418414f6f9d29b176ea0ad8037fff2e2dmtklein#include "SkTypes.h"
12ecbc526418414f6f9d29b176ea0ad8037fff2e2dmtklein
134083610290308faae347ed94cf7aff9895af6289joshualitt#if SK_SUPPORT_GPU
1424dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "GrContextFactory.h"
154083610290308faae347ed94cf7aff9895af6289joshualitt#endif
1624dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
1724dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "SkDebugCanvas.h"
1824dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "SkPicture.h"
1924dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "SkStream.h"
2024dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "SkSurface.h"
2124dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
2224dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#include "UrlDataManager.h"
2324dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
243724e574a744491b7cfb8187ac865a70ef3d4528bsalomonnamespace sk_gpu_test {
254083610290308faae347ed94cf7aff9895af6289joshualittclass GrContextFactory;
263724e574a744491b7cfb8187ac865a70ef3d4528bsalomon}
2724dd687ac5f7afb44d593d793180f115f7c68b68joshualittstruct MHD_Connection;
2824dd687ac5f7afb44d593d793180f115f7c68b68joshualittstruct MHD_PostProcessor;
2924dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
3024dd687ac5f7afb44d593d793180f115f7c68b68joshualittstruct UploadContext {
3124dd687ac5f7afb44d593d793180f115f7c68b68joshualitt    SkDynamicMemoryWStream fStream;
3224dd687ac5f7afb44d593d793180f115f7c68b68joshualitt    MHD_PostProcessor* fPostProcessor;
3324dd687ac5f7afb44d593d793180f115f7c68b68joshualitt    MHD_Connection* connection;
3424dd687ac5f7afb44d593d793180f115f7c68b68joshualitt};
3524dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
3624dd687ac5f7afb44d593d793180f115f7c68b68joshualittstruct Request {
374083610290308faae347ed94cf7aff9895af6289joshualitt    Request(SkString rootUrl);
384083610290308faae347ed94cf7aff9895af6289joshualitt    ~Request();
3924dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
40144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    // draws to canvas operation N, highlighting the Mth GrOp. m = -1 means no highlight.
4138d909ec2875f79952de08f36adfaac5680d2c53bungeman    sk_sp<SkData> drawToPng(int n, int m = -1);
4238d909ec2875f79952de08f36adfaac5680d2c53bungeman    sk_sp<SkData> writeOutSkp();
434dcbe431244c2f1abef8416b95ebf2921708fa63joshualitt    SkCanvas* getCanvas();
444dcbe431244c2f1abef8416b95ebf2921708fa63joshualitt    SkBitmap* getBitmapFromCanvas(SkCanvas* canvas);
45ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt    bool enableGPU(bool enable);
46c03e1c55a79f00d02ab528945425ff50cb700402Ben Wagner    bool setOverdraw(bool enable);
477831295c63b57efca6e4331b9d66df66985ca805brianosman    bool setColorMode(int mode);
481e5884b066da57a0c5dd9a0f9489b0bb1c3b3c34joshualitt    bool hasPicture() const { return SkToBool(fPicture.get()); }
491e5884b066da57a0c5dd9a0f9489b0bb1c3b3c34joshualitt    int getLastOp() const { return fDebugCanvas->getSize() - 1; }
501e5884b066da57a0c5dd9a0f9489b0bb1c3b3c34joshualitt
516bc967984a59e2f6602b5661caa8353dc985a4cbjoshualitt    bool initPictureFromStream(SkStream*);
526bc967984a59e2f6602b5661caa8353dc985a4cbjoshualitt
531e5884b066da57a0c5dd9a0f9489b0bb1c3b3c34joshualitt    // Returns the json list of ops as an SkData
5438d909ec2875f79952de08f36adfaac5680d2c53bungeman    sk_sp<SkData> getJsonOps(int n);
551e5884b066da57a0c5dd9a0f9489b0bb1c3b3c34joshualitt
56144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    // Returns a json list of ops as an SkData
57144a5c518ae921f210bdd9647c061e57d18f440cBrian Salomon    sk_sp<SkData> getJsonOpList(int n);
584dcbe431244c2f1abef8416b95ebf2921708fa63joshualitt
59ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt    // Returns json with the viewMatrix and clipRect
6038d909ec2875f79952de08f36adfaac5680d2c53bungeman    sk_sp<SkData> getJsonInfo(int n);
61ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt
62e0449cf9f43e179a809eb1b87ca3bf77cf6f1222joshualitt    // returns the color of the pixel at (x,y) in the canvas
63e0449cf9f43e179a809eb1b87ca3bf77cf6f1222joshualitt    SkColor getPixel(int x, int y);
644dcbe431244c2f1abef8416b95ebf2921708fa63joshualitt
6524dd687ac5f7afb44d593d793180f115f7c68b68joshualitt    UploadContext* fUploadContext;
665df4934b3e40cdc378e225d1dda39f015cae9baeMike Reed    std::unique_ptr<SkDebugCanvas> fDebugCanvas;
67ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt    UrlDataManager fUrlDataManager;
689d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
69ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualittprivate:
7038d909ec2875f79952de08f36adfaac5680d2c53bungeman    sk_sp<SkData> writeCanvasToPng(SkCanvas* canvas);
7146b301d2222b60dd5ab495b917dea163e8be94efjoshualitt    void drawToCanvas(int n, int m = -1);
72ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt    SkSurface* createCPUSurface();
73ee5348b069d53e5d843b2cebbac728ca7868d9fajoshualitt    SkSurface* createGPUSurface();
74ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt    SkIRect getBounds();
75ae47aeeda09408989223291c54d12b2a98fa2b12joshualitt    GrContext* getContext();
769d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary
77ca2622ba051829fed5f30facd74c5b41cd4b931creed    sk_sp<SkPicture> fPicture;
783724e574a744491b7cfb8187ac865a70ef3d4528bsalomon    sk_gpu_test::GrContextFactory* fContextFactory;
791b612a89fba2275e3effe12bdc9b6cdc2f4d9eeeHal Canary    sk_sp<SkSurface> fSurface;
8024dd687ac5f7afb44d593d793180f115f7c68b68joshualitt    bool fGPUEnabled;
81c03e1c55a79f00d02ab528945425ff50cb700402Ben Wagner    bool fOverdraw;
827831295c63b57efca6e4331b9d66df66985ca805brianosman    int fColorMode;
8324dd687ac5f7afb44d593d793180f115f7c68b68joshualitt};
8424dd687ac5f7afb44d593d793180f115f7c68b68joshualitt
8524dd687ac5f7afb44d593d793180f115f7c68b68joshualitt#endif
86