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