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 "SkRunnable.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[64];
     29     skiatest::Reporter* fReporter;
     30     SkBitmap* fBitmap;
     31 };
     32 
     33 class PathOpsThreadedTestRunner {
     34 public:
     35     PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount)
     36         : fNumThreads(threadCount)
     37         , fReporter(reporter) {
     38     }
     39 
     40     ~PathOpsThreadedTestRunner();
     41 
     42     void render();
     43 
     44 public:
     45     int fNumThreads;
     46     SkTDArray<PathOpsThreadedRunnable*> fRunnables;
     47     skiatest::Reporter* fReporter;
     48 };
     49 
     50 class PathOpsThreadedRunnable : public SkRunnable {
     51 public:
     52     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
     53             PathOpsThreadedTestRunner* runner) {
     54         fState.fA = a;
     55         fState.fB = b;
     56         fState.fC = c;
     57         fState.fD = d;
     58         fState.fReporter = runner->fReporter;
     59         fTestFun = testFun;
     60     }
     61 
     62     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
     63             PathOpsThreadedTestRunner* runner) {
     64         SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
     65         strcpy(fState.fSerialNo, str);
     66         fState.fReporter = runner->fReporter;
     67         fTestFun = testFun;
     68     }
     69 
     70     virtual void run() SK_OVERRIDE {
     71         SkBitmap bitmap;
     72         fState.fBitmap = &bitmap;
     73         char pathStr[PATH_STR_SIZE];
     74         fState.fPathStr = pathStr;
     75         (*fTestFun)(&fState);
     76     }
     77 
     78 private:
     79     PathOpsThreadState fState;
     80     void (*fTestFun)(PathOpsThreadState*);
     81 };
     82 
     83 #endif
     84