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