1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef PathOpsThreadedCommon_DEFINED
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define PathOpsThreadedCommon_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBitmap.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGraphics.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPathOps.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTDArray.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <string>
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define PATH_STR_SIZE 512
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass PathOpsThreadedRunnable;
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace skiatest {
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Reporter;
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct PathOpsThreadState {
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    unsigned char fA;
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    unsigned char fB;
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    unsigned char fC;
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    unsigned char fD;
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::string fPathStr;
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const char* fKey;
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    char fSerialNo[256];
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    skiatest::Reporter* fReporter;
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkBitmap* fBitmap;
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputProgress(const char* pathStr, SkPath::FillType);
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void outputProgress(const char* pathStr, SkPathOp);
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass PathOpsThreadedTestRunner {
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    PathOpsThreadedTestRunner(skiatest::Reporter* reporter) : fReporter(reporter) {}
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    ~PathOpsThreadedTestRunner();
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void render();
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTDArray<PathOpsThreadedRunnable*> fRunnables;
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    skiatest::Reporter* fReporter;
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass PathOpsThreadedRunnable {
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic:
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            PathOpsThreadedTestRunner* runner) {
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fA = a;
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fB = b;
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fC = c;
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fD = d;
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fReporter = runner->fReporter;
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fTestFun = testFun;
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            PathOpsThreadedTestRunner* runner) {
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        strcpy(fState.fSerialNo, str);
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fReporter = runner->fReporter;
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fTestFun = testFun;
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str,
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            PathOpsThreadedTestRunner* runner) {
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fA = dirNo;
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        strcpy(fState.fSerialNo, str);
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fReporter = runner->fReporter;
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fTestFun = testFun;
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void operator()() {
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkBitmap bitmap;
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        fState.fBitmap = &bitmap;
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024);
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        (*fTestFun)(&fState);
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate:
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    PathOpsThreadState fState;
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    void (*fTestFun)(PathOpsThreadState*);
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
96