1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef Request_DEFINED
9 #define Request_DEFINED
10 
11 #include "SkTypes.h"
12 
13 #if SK_SUPPORT_GPU
14 #include "GrContextFactory.h"
15 #endif
16 
17 #include "SkDebugCanvas.h"
18 #include "SkPicture.h"
19 #include "SkStream.h"
20 #include "SkSurface.h"
21 
22 #include "UrlDataManager.h"
23 
24 namespace sk_gpu_test {
25 class GrContextFactory;
26 }
27 struct MHD_Connection;
28 struct MHD_PostProcessor;
29 
30 struct UploadContext {
31     SkDynamicMemoryWStream fStream;
32     MHD_PostProcessor* fPostProcessor;
33     MHD_Connection* connection;
34 };
35 
36 struct Request {
37     Request(SkString rootUrl);
38     ~Request();
39 
40     // draws to canvas operation N, highlighting the Mth GrOp. m = -1 means no highlight.
41     sk_sp<SkData> drawToPng(int n, int m = -1);
42     sk_sp<SkData> writeOutSkp();
43     SkCanvas* getCanvas();
44     SkBitmap* getBitmapFromCanvas(SkCanvas* canvas);
45     bool enableGPU(bool enable);
46     bool setOverdraw(bool enable);
47     bool setColorMode(int mode);
hasPictureRequest48     bool hasPicture() const { return SkToBool(fPicture.get()); }
getLastOpRequest49     int getLastOp() const { return fDebugCanvas->getSize() - 1; }
50 
51     bool initPictureFromStream(SkStream*);
52 
53     // Returns the json list of ops as an SkData
54     sk_sp<SkData> getJsonOps(int n);
55 
56     // Returns a json list of ops as an SkData
57     sk_sp<SkData> getJsonOpList(int n);
58 
59     // Returns json with the viewMatrix and clipRect
60     sk_sp<SkData> getJsonInfo(int n);
61 
62     // returns the color of the pixel at (x,y) in the canvas
63     SkColor getPixel(int x, int y);
64 
65     UploadContext* fUploadContext;
66     std::unique_ptr<SkDebugCanvas> fDebugCanvas;
67     UrlDataManager fUrlDataManager;
68 
69 private:
70     sk_sp<SkData> writeCanvasToPng(SkCanvas* canvas);
71     void drawToCanvas(int n, int m = -1);
72     SkSurface* createCPUSurface();
73     SkSurface* createGPUSurface();
74     SkIRect getBounds();
75     GrContext* getContext();
76 
77     sk_sp<SkPicture> fPicture;
78     sk_gpu_test::GrContextFactory* fContextFactory;
79     sk_sp<SkSurface> fSurface;
80     bool fGPUEnabled;
81     bool fOverdraw;
82     int fColorMode;
83 };
84 
85 #endif
86