2013-04-10 15:55:37 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2012 Google Inc.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
#ifndef PathOpsThreadedCommon_DEFINED
|
|
|
|
#define PathOpsThreadedCommon_DEFINED
|
|
|
|
|
|
|
|
#include "SkCountdown.h"
|
|
|
|
#include "SkRunnable.h"
|
|
|
|
#include "SkTDArray.h"
|
|
|
|
#include "SkThreadPool.h"
|
|
|
|
|
|
|
|
#define PATH_STR_SIZE 512
|
|
|
|
|
|
|
|
class PathOpsThreadedRunnable;
|
2013-04-10 18:53:01 +00:00
|
|
|
|
|
|
|
namespace skiatest {
|
|
|
|
class Reporter;
|
|
|
|
}
|
2013-04-10 15:55:37 +00:00
|
|
|
|
|
|
|
struct PathOpsThreadState {
|
|
|
|
unsigned char fA;
|
|
|
|
unsigned char fB;
|
|
|
|
unsigned char fC;
|
|
|
|
unsigned char fD;
|
|
|
|
char* fPathStr;
|
|
|
|
skiatest::Reporter* fReporter;
|
|
|
|
SkBitmap* fBitmap;
|
|
|
|
};
|
|
|
|
|
|
|
|
class PathOpsThreadedTestRunner {
|
|
|
|
public:
|
|
|
|
PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount)
|
|
|
|
: fNumThreads(threadCount)
|
|
|
|
, fThreadPool(threadCount)
|
|
|
|
, fCountdown(threadCount)
|
|
|
|
, fReporter(reporter) {
|
|
|
|
}
|
|
|
|
|
|
|
|
~PathOpsThreadedTestRunner();
|
|
|
|
|
|
|
|
void render();
|
|
|
|
|
|
|
|
public:
|
|
|
|
int fNumThreads;
|
|
|
|
SkTDArray<PathOpsThreadedRunnable*> fRunnables;
|
|
|
|
SkThreadPool fThreadPool;
|
|
|
|
SkCountdown fCountdown;
|
|
|
|
skiatest::Reporter* fReporter;
|
|
|
|
};
|
|
|
|
|
|
|
|
class PathOpsThreadedRunnable : public SkRunnable {
|
|
|
|
public:
|
|
|
|
PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d,
|
|
|
|
PathOpsThreadedTestRunner* runner) {
|
|
|
|
fState.fA = a;
|
|
|
|
fState.fB = b;
|
|
|
|
fState.fC = c;
|
|
|
|
fState.fD = d;
|
|
|
|
fState.fReporter = runner->fReporter;
|
|
|
|
fTestFun = testFun;
|
|
|
|
fDone = &runner->fCountdown;
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void run() SK_OVERRIDE {
|
|
|
|
SkBitmap bitmap;
|
|
|
|
fState.fBitmap = &bitmap;
|
|
|
|
char pathStr[PATH_STR_SIZE];
|
|
|
|
fState.fPathStr = pathStr;
|
|
|
|
(*fTestFun)(&fState);
|
|
|
|
fDone->run();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
PathOpsThreadState fState;
|
|
|
|
void (*fTestFun)(PathOpsThreadState*);
|
|
|
|
SkRunnable* fDone;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|