| /* |
| * 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 "include/core/SkBitmap.h" |
| #include "include/core/SkTypes.h" |
| #include "include/pathops/SkPathOps.h" |
| #include "include/private/base/SkTDArray.h" |
| |
| #include <string> |
| |
| #define PATH_STR_SIZE 512 |
| |
| class PathOpsThreadedRunnable; |
| enum class SkPathFillType; |
| |
| namespace skiatest { |
| class Reporter; |
| } // namespace skiatest |
| |
| struct PathOpsThreadState { |
| unsigned char fA; |
| unsigned char fB; |
| unsigned char fC; |
| unsigned char fD; |
| std::string fPathStr; |
| const char* fKey; |
| char fSerialNo[256]; |
| skiatest::Reporter* fReporter; |
| SkBitmap* fBitmap; |
| |
| void outputProgress(const char* pathStr, SkPathFillType); |
| void outputProgress(const char* pathStr, SkPathOp); |
| }; |
| |
| class PathOpsThreadedTestRunner { |
| public: |
| PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {} |
| |
| ~PathOpsThreadedTestRunner(); |
| |
| void render(); |
| |
| public: |
| SkTDArray<PathOpsThreadedRunnable*> fRunnables; |
| skiatest::Reporter* fReporter; |
| }; |
| |
| class PathOpsThreadedRunnable { |
| public: |
| PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d, |
| PathOpsThreadedTestRunner* runner) { |
| fState.fA = (a & 0xFF); |
| fState.fB = (b & 0xFF); |
| fState.fC = (c & 0xFF); |
| fState.fD = (d & 0xFF); |
| fState.fReporter = runner->fReporter; |
| fTestFun = testFun; |
| } |
| |
| PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str, |
| PathOpsThreadedTestRunner* runner) { |
| SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1); |
| strcpy(fState.fSerialNo, str); |
| fState.fReporter = runner->fReporter; |
| fTestFun = testFun; |
| } |
| |
| PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str, |
| PathOpsThreadedTestRunner* runner) { |
| SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1); |
| fState.fA = dirNo; |
| strcpy(fState.fSerialNo, str); |
| fState.fReporter = runner->fReporter; |
| fTestFun = testFun; |
| } |
| |
| void operator()() { |
| SkBitmap bitmap; |
| fState.fBitmap = &bitmap; |
| (*fTestFun)(&fState); |
| } |
| |
| private: |
| PathOpsThreadState fState; |
| void (*fTestFun)(PathOpsThreadState*); |
| }; |
| |
| #endif |