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