2460bbdfbb
Reason for revert: Leaks, leaks, leaks. Original issue's description: > SkThreadPool ~~> SkTaskGroup > > SkTaskGroup is like SkThreadPool except the threads stay in > one global pool. Each SkTaskGroup itself is tiny (4 bytes) > and its wait() method applies only to tasks add()ed to that > instance, not the whole thread pool. > > This means we don't need to bring up new thread pools when > tests themselves want to use multithreading (e.g. pathops, > quilt). We just create a new SkTaskGroup and wait for that > to complete. This should be more efficient, and allow us > to expand where we use threads to really latency sensitive > places. E.g. we can probably now use these in nanobench > for CPU .skp rendering. > > Now that all threads are sharing the same pool, I think we > can remove most of the custom mechanism pathops tests use > to control threading. They'll just ride on the global pool > with all other tests now. > > This (temporarily?) removes the GPU multithreading feature > from DM, which we don't use. > > On my desktop, DM runs a little faster (57s -> 55s) in > Debug, and a lot faster in Release (36s -> 24s). The bots > show speedups of similar proportions, cutting more than a > minute off the N4/Release and Win7/Debug runtimes. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/9c7207b5dc71dc5a96a2eb107d401133333d5b6f R=caryclark@google.com, bsalomon@google.com, bungeman@google.com, reed@google.com, mtklein@chromium.org TBR=bsalomon@google.com, bungeman@google.com, caryclark@google.com, mtklein@chromium.org, reed@google.com NOTREECHECKS=true NOTRY=true BUG=skia: Author: mtklein@google.com Review URL: https://codereview.chromium.org/533393002
95 lines
2.3 KiB
C++
95 lines
2.3 KiB
C++
/*
|
|
* 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 "SkGraphics.h"
|
|
#include "SkRunnable.h"
|
|
#include "SkTDArray.h"
|
|
|
|
#define PATH_STR_SIZE 512
|
|
|
|
class PathOpsThreadedRunnable;
|
|
|
|
namespace skiatest {
|
|
class Reporter;
|
|
}
|
|
|
|
struct PathOpsThreadState {
|
|
unsigned char fA;
|
|
unsigned char fB;
|
|
unsigned char fC;
|
|
unsigned char fD;
|
|
char* fPathStr;
|
|
const char* fKey;
|
|
char fSerialNo[256];
|
|
skiatest::Reporter* fReporter;
|
|
SkBitmap* fBitmap;
|
|
};
|
|
|
|
class PathOpsThreadedTestRunner {
|
|
public:
|
|
PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount)
|
|
: fNumThreads(threadCount)
|
|
, fReporter(reporter) {
|
|
}
|
|
|
|
~PathOpsThreadedTestRunner();
|
|
|
|
void render();
|
|
|
|
public:
|
|
int fNumThreads;
|
|
SkTDArray<PathOpsThreadedRunnable*> fRunnables;
|
|
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;
|
|
}
|
|
|
|
PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str,
|
|
PathOpsThreadedTestRunner* runner) {
|
|
SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
|
|
strcpy(fState.fSerialNo, str);
|
|
fState.fReporter = runner->fReporter;
|
|
fTestFun = testFun;
|
|
}
|
|
|
|
PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str,
|
|
PathOpsThreadedTestRunner* runner) {
|
|
SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1);
|
|
fState.fA = dirNo;
|
|
strcpy(fState.fSerialNo, str);
|
|
fState.fReporter = runner->fReporter;
|
|
fTestFun = testFun;
|
|
}
|
|
|
|
virtual void run() SK_OVERRIDE {
|
|
SkBitmap bitmap;
|
|
fState.fBitmap = &bitmap;
|
|
char pathStr[PATH_STR_SIZE];
|
|
fState.fPathStr = pathStr;
|
|
SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024);
|
|
(*fTestFun)(&fState);
|
|
}
|
|
|
|
private:
|
|
PathOpsThreadState fState;
|
|
void (*fTestFun)(PathOpsThreadState*);
|
|
};
|
|
|
|
#endif
|