xref: /aosp_15_r20/external/skia/tests/PathOpsThreadedCommon.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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 "include/core/SkBitmap.h"
11 #include "include/core/SkTypes.h"
12 #include "include/pathops/SkPathOps.h"
13 #include "include/private/base/SkTDArray.h"
14 
15 #include <cstring>
16 #include <string>
17 
18 #define PATH_STR_SIZE 512
19 
20 class PathOpsThreadedRunnable;
21 enum class SkPathFillType;
22 
23 namespace skiatest {
24 class Reporter;
25 }  // namespace skiatest
26 
27 struct PathOpsThreadState {
28     unsigned char fA;
29     unsigned char fB;
30     unsigned char fC;
31     unsigned char fD;
32     std::string fPathStr;
33     const char* fKey;
34     char fSerialNo[256];
35     skiatest::Reporter* fReporter;
36     SkBitmap* fBitmap;
37 
38     void outputProgress(const char* pathStr, SkPathFillType);
39     void outputProgress(const char* pathStr, SkPathOp);
40 };
41 
42 class PathOpsThreadedTestRunner {
43 public:
PathOpsThreadedTestRunner(skiatest::Reporter * reporter)44     PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {}
45 
46     ~PathOpsThreadedTestRunner();
47 
48     void render();
49 
50 public:
51     SkTDArray<PathOpsThreadedRunnable*> fRunnables;
52     skiatest::Reporter* fReporter;
53 };
54 
55 class PathOpsThreadedRunnable {
56 public:
PathOpsThreadedRunnable(void (* testFun)(PathOpsThreadState *),int a,int b,int c,int d,PathOpsThreadedTestRunner * runner)57     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
58             PathOpsThreadedTestRunner* runner) {
59         fState.fA = (a & 0xFF);
60         fState.fB = (b & 0xFF);
61         fState.fC = (c & 0xFF);
62         fState.fD = (d & 0xFF);
63         fState.fReporter = runner->fReporter;
64         fTestFun = testFun;
65     }
66 
PathOpsThreadedRunnable(void (* testFun)(PathOpsThreadState *),const char * str,PathOpsThreadedTestRunner * runner)67     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
68             PathOpsThreadedTestRunner* runner) {
69         SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
70         strcpy(fState.fSerialNo, str);
71         fState.fReporter = runner->fReporter;
72         fTestFun = testFun;
73     }
74 
PathOpsThreadedRunnable(void (* testFun)(PathOpsThreadState *),int dirNo,const char * str,PathOpsThreadedTestRunner * runner)75     PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str,
76             PathOpsThreadedTestRunner* runner) {
77         SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
78         fState.fA = dirNo;
79         strcpy(fState.fSerialNo, str);
80         fState.fReporter = runner->fReporter;
81         fTestFun = testFun;
82     }
83 
operator()84     void operator()() {
85         SkBitmap bitmap;
86         fState.fBitmap = &bitmap;
87         (*fTestFun)(&fState);
88     }
89 
90 private:
91     PathOpsThreadState fState;
92     void (*fTestFun)(PathOpsThreadState*);
93 };
94 
95 #endif
96