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