diff options
author | caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-04-10 15:55:37 +0000 |
---|---|---|
committer | caryclark@google.com <caryclark@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-04-10 15:55:37 +0000 |
commit | 66089e4ec4f1702caf2154780471417872862148 (patch) | |
tree | e078d7a335a396cc325f2d2f55723315307eb07d /tests/PathOpsThreadedCommon.h | |
parent | 51dbabee67ea1285e1115e535d26944d4da99be5 (diff) |
Make parallel unit testing work on windows
Review URL: https://codereview.chromium.org/14072002
git-svn-id: http://skia.googlecode.com/svn/trunk@8594 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/PathOpsThreadedCommon.h')
-rw-r--r-- | tests/PathOpsThreadedCommon.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/PathOpsThreadedCommon.h b/tests/PathOpsThreadedCommon.h new file mode 100644 index 0000000000..7f57a7bbd5 --- /dev/null +++ b/tests/PathOpsThreadedCommon.h @@ -0,0 +1,79 @@ +/* + * 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; +class skiatest::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<PathOpsThreadedRunnable*> 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 |