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