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