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