/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef PathOpsThreadedCommon_DEFINED #define PathOpsThreadedCommon_DEFINED #include "SkCountdown.h" #include "SkRunnable.h" #include "SkTDArray.h" #include "SkThreadPool.h" #define PATH_STR_SIZE 512 class PathOpsThreadedRunnable; namespace skiatest { class Reporter; } struct PathOpsThreadState { unsigned char fA; unsigned char fB; unsigned char fC; unsigned char fD; char* fPathStr; skiatest::Reporter* fReporter; SkBitmap* fBitmap; }; class PathOpsThreadedTestRunner { public: PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount) : fNumThreads(threadCount) , fThreadPool(threadCount) , fCountdown(threadCount) , fReporter(reporter) { } ~PathOpsThreadedTestRunner(); void render(); public: int fNumThreads; SkTDArray fRunnables; SkThreadPool fThreadPool; SkCountdown fCountdown; skiatest::Reporter* fReporter; }; class PathOpsThreadedRunnable : public SkRunnable { public: PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d, PathOpsThreadedTestRunner* runner) { fState.fA = a; fState.fB = b; fState.fC = c; fState.fD = d; fState.fReporter = runner->fReporter; fTestFun = testFun; fDone = &runner->fCountdown; } virtual void run() SK_OVERRIDE { SkBitmap bitmap; fState.fBitmap = &bitmap; char pathStr[PATH_STR_SIZE]; fState.fPathStr = pathStr; (*fTestFun)(&fState); fDone->run(); } private: PathOpsThreadState fState; void (*fTestFun)(PathOpsThreadState*); SkRunnable* fDone; }; #endif