17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/* 27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2012 Google Inc. 37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * 47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be 57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file. 67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */ 77839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#ifndef PathOpsThreadedCommon_DEFINED 87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#define PathOpsThreadedCommon_DEFINED 97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 100a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger#include "SkGraphics.h" 117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkRunnable.h" 127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkTDArray.h" 137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#define PATH_STR_SIZE 512 157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass PathOpsThreadedRunnable; 177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergernamespace skiatest { 197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass Reporter; 207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger} 217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerstruct PathOpsThreadState { 237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger unsigned char fA; 247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger unsigned char fB; 257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger unsigned char fC; 267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger unsigned char fD; 277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger char* fPathStr; 287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger const char* fKey; 290a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger char fSerialNo[256]; 307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger skiatest::Reporter* fReporter; 317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkBitmap* fBitmap; 327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass PathOpsThreadedTestRunner { 357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic: 367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger PathOpsThreadedTestRunner(skiatest::Reporter* reporter, int threadCount) 377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger : fNumThreads(threadCount) 387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger , fReporter(reporter) { 397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger ~PathOpsThreadedTestRunner(); 427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void render(); 447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic: 467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger int fNumThreads; 477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkTDArray<PathOpsThreadedRunnable*> fRunnables; 487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger skiatest::Reporter* fReporter; 497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass PathOpsThreadedRunnable : public SkRunnable { 527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic: 537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int a, int b, int c, int d, 547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger PathOpsThreadedTestRunner* runner) { 557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fA = a; 567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fB = b; 577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fC = c; 587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fD = d; 597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fReporter = runner->fReporter; 607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fTestFun = testFun; 617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), const char* str, 6458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger PathOpsThreadedTestRunner* runner) { 6558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1); 6658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger strcpy(fState.fSerialNo, str); 6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger fState.fReporter = runner->fReporter; 6858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger fTestFun = testFun; 6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 7058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 710a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger PathOpsThreadedRunnable(void (*testFun)(PathOpsThreadState*), int dirNo, const char* str, 720a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger PathOpsThreadedTestRunner* runner) { 730a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkASSERT(strlen(str) < sizeof(fState.fSerialNo) - 1); 740a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger fState.fA = dirNo; 750a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger strcpy(fState.fSerialNo, str); 760a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger fState.fReporter = runner->fReporter; 770a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger fTestFun = testFun; 780a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger } 790a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger 807839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger virtual void run() SK_OVERRIDE { 817839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger SkBitmap bitmap; 827839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fBitmap = &bitmap; 837839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger char pathStr[PATH_STR_SIZE]; 847839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger fState.fPathStr = pathStr; 850a657bbc2c6fc9daf699942e023050536d5ec95fDerek Sollenberger SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024); 867839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger (*fTestFun)(&fState); 877839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger } 887839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 897839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerprivate: 907839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger PathOpsThreadState fState; 917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger void (*fTestFun)(PathOpsThreadState*); 927839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger}; 937839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger 947839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#endif 95