1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright 2012 Google Inc.
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Use of this source code is governed by a BSD-style license that can be
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * found in the LICENSE file.
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef PathOpsThreadedCommon_DEFINED
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PathOpsThreadedCommon_DEFINED
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "SkGraphics.h"
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "SkRunnable.h"
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "SkTDArray.h"
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PATH_STR_SIZE 512
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass PathOpsThreadedRunnable;
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace skiatest {
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass Reporter;
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverstruct PathOpsThreadState {
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unsigned char fA;
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unsigned char fB;
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unsigned char fC;
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unsigned char fD;
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    char* fPathStr;
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    const char* fKey;
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    char fSerialNo[256];
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    skiatest::Reporter* fReporter;
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    SkBitmap* fBitmap;
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass PathOpsThreadedTestRunner {
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic:
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {}
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ~PathOpsThreadedTestRunner();
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void render();
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic:
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    SkTDArray<PathOpsThreadedRunnable*> fRunnables;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    skiatest::Reporter* fReporter;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass PathOpsThreadedRunnable : public SkRunnable {
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic:
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            PathOpsThreadedTestRunner* runner) {
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fA = a;
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fB = b;
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fC = c;
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fD = d;
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fReporter = runner->fReporter;
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fTestFun = testFun;
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            PathOpsThreadedTestRunner* runner) {
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        strcpy(fState.fSerialNo, str);
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fReporter = runner->fReporter;
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fTestFun = testFun;
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str,
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            PathOpsThreadedTestRunner* runner) {
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fA = dirNo;
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        strcpy(fState.fSerialNo, str);
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fReporter = runner->fReporter;
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fTestFun = testFun;
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    virtual void run() SK_OVERRIDE {
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        SkBitmap bitmap;
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fBitmap = &bitmap;
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        char pathStr[PATH_STR_SIZE];
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        fState.fPathStr = pathStr;
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024);
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        (*fTestFun)(&fState);
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate:
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    PathOpsThreadState fState;
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    void (*fTestFun)(PathOpsThreadState*);
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver