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