blob: 124921e3892d369fdb210a55f158129f39fc7fd1 [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.com7eaa53d2013-10-02 14:49:34 +000010#include "SkGraphics.h"
caryclark@google.com66089e42013-04-10 15:55:37 +000011#include "SkRunnable.h"
12#include "SkTDArray.h"
caryclark@google.com66089e42013-04-10 15:55:37 +000013
14#define PATH_STR_SIZE 512
15
16class PathOpsThreadedRunnable;
caryclark@google.come942bc32013-04-10 18:53:01 +000017
18namespace skiatest {
19class Reporter;
20}
caryclark@google.com66089e42013-04-10 15:55:37 +000021
22struct PathOpsThreadState {
23 unsigned char fA;
24 unsigned char fB;
25 unsigned char fC;
26 unsigned char fD;
27 char* fPathStr;
caryclark@google.com03610322013-04-18 15:58:21 +000028 const char* fKey;
caryclark@google.com7eaa53d2013-10-02 14:49:34 +000029 char fSerialNo[256];
caryclark@google.com66089e42013-04-10 15:55:37 +000030 skiatest::Reporter* fReporter;
31 SkBitmap* fBitmap;
32};
33
34class PathOpsThreadedTestRunner {
35public:
mtklein406654b2014-09-03 15:34:37 -070036 PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {}
caryclark@google.com66089e42013-04-10 15:55:37 +000037
38 ~PathOpsThreadedTestRunner();
39
40 void render();
41
42public:
caryclark@google.com66089e42013-04-10 15:55:37 +000043 SkTDArray<PathOpsThreadedRunnable*> fRunnables;
caryclark@google.com66089e42013-04-10 15:55:37 +000044 skiatest::Reporter* fReporter;
45};
46
47class PathOpsThreadedRunnable : public SkRunnable {
48public:
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;
caryclark@google.com66089e42013-04-10 15:55:37 +000057 }
58
caryclark@google.com07e97fc2013-07-08 17:17:02 +000059 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
caryclark@google.coma2bbc6e2013-11-01 17:36:03 +000067 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
caryclark@google.com66089e42013-04-10 15:55:37 +000076 virtual void run() SK_OVERRIDE {
77 SkBitmap bitmap;
78 fState.fBitmap = &bitmap;
79 char pathStr[PATH_STR_SIZE];
80 fState.fPathStr = pathStr;
caryclark@google.com7eaa53d2013-10-02 14:49:34 +000081 SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024);
caryclark@google.com66089e42013-04-10 15:55:37 +000082 (*fTestFun)(&fState);
caryclark@google.com66089e42013-04-10 15:55:37 +000083 }
84
85private:
86 PathOpsThreadState fState;
87 void (*fTestFun)(PathOpsThreadState*);
caryclark@google.com66089e42013-04-10 15:55:37 +000088};
89
90#endif