| /* | |
| * 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 <cstring> | |
| #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 |