blob: e6d3bed725c103dca2a1eb5a2c5ebb7142b793fd [file] [log] [blame]
caryclark@google.com66089e42013-04-10 15:55:37 +00001/*
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
caryclark@google.com66089e42013-04-10 15:55:37 +000010#include "SkRunnable.h"
11#include "SkTDArray.h"
caryclark@google.com66089e42013-04-10 15:55:37 +000012
13#define PATH_STR_SIZE 512
14
15class PathOpsThreadedRunnable;
caryclark@google.come942bc32013-04-10 18:53:01 +000016
17namespace skiatest {
18class Reporter;
19}
caryclark@google.com66089e42013-04-10 15:55:37 +000020
21struct PathOpsThreadState {
22 unsigned char fA;
23 unsigned char fB;
24 unsigned char fC;
25 unsigned char fD;
26 char* fPathStr;
caryclark@google.com03610322013-04-18 15:58:21 +000027 const char* fKey;
caryclark@google.com07e97fc2013-07-08 17:17:02 +000028 char fSerialNo[64];
caryclark@google.com66089e42013-04-10 15:55:37 +000029 skiatest::Reporter* fReporter;
30 SkBitmap* fBitmap;
31};
32
33class PathOpsThreadedTestRunner {
34public:
35 PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount)
36 : fNumThreads(threadCount)
caryclark@google.com66089e42013-04-10 15:55:37 +000037 , fReporter(reporter) {
38 }
39
40 ~PathOpsThreadedTestRunner();
41
42 void render();
43
44public:
45 int fNumThreads;
46 SkTDArray<PathOpsThreadedRunnable*> fRunnables;
caryclark@google.com66089e42013-04-10 15:55:37 +000047 skiatest::Reporter* fReporter;
48};
49
50class PathOpsThreadedRunnable : public SkRunnable {
51public:
52 PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
53 PathOpsThreadedTestRunner* runner) {
54 fState.fA = a;
55 fState.fB = b;
56 fState.fC = c;
57 fState.fD = d;
58 fState.fReporter = runner->fReporter;
59 fTestFun = testFun;
caryclark@google.com66089e42013-04-10 15:55:37 +000060 }
61
caryclark@google.com07e97fc2013-07-08 17:17:02 +000062 PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
63 PathOpsThreadedTestRunner* runner) {
64 SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
65 strcpy(fState.fSerialNo, str);
66 fState.fReporter = runner->fReporter;
67 fTestFun = testFun;
68 }
69
caryclark@google.com66089e42013-04-10 15:55:37 +000070 virtual void run() SK_OVERRIDE {
71 SkBitmap bitmap;
72 fState.fBitmap = &bitmap;
73 char pathStr[PATH_STR_SIZE];
74 fState.fPathStr = pathStr;
75 (*fTestFun)(&fState);
caryclark@google.com66089e42013-04-10 15:55:37 +000076 }
77
78private:
79 PathOpsThreadState fState;
80 void (*fTestFun)(PathOpsThreadState*);
caryclark@google.com66089e42013-04-10 15:55:37 +000081};
82
83#endif