Home | History | Annotate | Download | only in skiaserve
      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);
     48     bool hasPicture() const { return SkToBool(fPicture.get()); }
     49     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