Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2012 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 #ifndef PathOpsThreadedCommon_DEFINED
      8 #define PathOpsThreadedCommon_DEFINED
      9 
     10 #include "SkBitmap.h"
     11 #include "SkGraphics.h"
     12 #include "SkPath.h"
     13 #include "SkPathOps.h"
     14 #include "SkString.h"
     15 #include "SkTDArray.h"
     16 
     17 #define PATH_STR_SIZE 512
     18 
     19 class PathOpsThreadedRunnable;
     20 
     21 namespace skiatest {
     22 class Reporter;
     23 }
     24 
     25 struct PathOpsThreadState {
     26     unsigned char fA;
     27     unsigned char fB;
     28     unsigned char fC;
     29     unsigned char fD;
     30     SkString fPathStr;
     31     const char* fKey;
     32     char fSerialNo[256];
     33     skiatest::Reporter* fReporter;
     34     SkBitmap* fBitmap;
     35 
     36     void outputProgress(const char* pathStr, SkPath::FillType);
     37     void outputProgress(const char* pathStr, SkPathOp);
     38 };
     39 
     40 class PathOpsThreadedTestRunner {
     41 public:
     42     PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {}
     43 
     44     ~PathOpsThreadedTestRunner();
     45 
     46     void render();
     47 
     48 public:
     49     SkTDArray<PathOpsThreadedRunnable*> fRunnables;
     50     skiatest::Reporter* fReporter;
     51 };
     52 
     53 class PathOpsThreadedRunnable {
     54 public:
     55     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
     56             PathOpsThreadedTestRunner* runner) {
     57         fState.fA = a;
     58         fState.fB = b;
     59         fState.fC = c;
     60         fState.fD = d;
     61         fState.fReporter = runner->fReporter;
     62         fTestFun = testFun;
     63     }
     64 
     65     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
     66             PathOpsThreadedTestRunner* runner) {
     67         SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
     68         strcpy(fState.fSerialNo, str);
     69         fState.fReporter = runner->fReporter;
     70         fTestFun = testFun;
     71     }
     72 
     73     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str,
     74             PathOpsThreadedTestRunner* runner) {
     75         SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
     76         fState.fA = dirNo;
     77         strcpy(fState.fSerialNo, str);
     78         fState.fReporter = runner->fReporter;
     79         fTestFun = testFun;
     80     }
     81 
     82     void operator()() {
     83         SkBitmap bitmap;
     84         fState.fBitmap = &bitmap;
     85         SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024);
     86         (*fTestFun)(&fState);
     87     }
     88 
     89 private:
     90     PathOpsThreadState fState;
     91     void (*fTestFun)(PathOpsThreadState*);
     92 };
     93 
     94 #endif
     95