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