11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
87cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#ifndef SkBenchmark_DEFINED
97cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#define SkBenchmark_DEFINED
107cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
117cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkRefCnt.h"
127cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkPoint.h"
1357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed#include "SkTDict.h"
147cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkTRegistry.h"
157cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifdef SK_DEBUG
171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    #define SkBENCHLOOP(n) 1
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#else
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    #define SkBENCHLOOP(n) n
201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
227cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedclass SkCanvas;
237cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedclass SkPaint;
247cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
2554e0f955c21365271661cd92a29d06a847a18554Mike Reedclass SkTriState {
2654e0f955c21365271661cd92a29d06a847a18554Mike Reedpublic:
2754e0f955c21365271661cd92a29d06a847a18554Mike Reed    enum State {
2854e0f955c21365271661cd92a29d06a847a18554Mike Reed        kDefault,
2954e0f955c21365271661cd92a29d06a847a18554Mike Reed        kTrue,
3054e0f955c21365271661cd92a29d06a847a18554Mike Reed        kFalse
3154e0f955c21365271661cd92a29d06a847a18554Mike Reed    };
3254e0f955c21365271661cd92a29d06a847a18554Mike Reed};
3354e0f955c21365271661cd92a29d06a847a18554Mike Reed
347cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedclass SkBenchmark : public SkRefCnt {
357cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedpublic:
3657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    SkBenchmark(void* defineDict);
377cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
387cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    const char* getName();
397cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    SkIPoint getSize();
407cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    void draw(SkCanvas*);
417cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
427cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    void setForceAlpha(int alpha) {
437cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed        fForceAlpha = alpha;
447cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    }
457cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
467cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    void setForceAA(bool aa) {
477cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed        fForceAA = aa;
487cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    }
497cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
507cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    void setForceFilter(bool filter) {
517cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed        fForceFilter = filter;
527cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    }
5354e0f955c21365271661cd92a29d06a847a18554Mike Reed
5454e0f955c21365271661cd92a29d06a847a18554Mike Reed    void setDither(SkTriState::State state) {
5554e0f955c21365271661cd92a29d06a847a18554Mike Reed        fDither = state;
5654e0f955c21365271661cd92a29d06a847a18554Mike Reed    }
5757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed
584c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    void setStrokeWidth(SkScalar width) {
594c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed      strokeWidth = width;
604c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed      fHasStrokeWidth = true;
614c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    }
624c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed
634c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    SkScalar getStrokeWidth() {
644c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed      return strokeWidth;
654c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    }
664c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed
674c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    bool hasStrokeWidth() {
684c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed      return fHasStrokeWidth;
694c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    }
704c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed
7157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    const char* findDefine(const char* key) const;
7232a0e74681142badb9efd90be3558bd9a943755eMike Reed    bool findDefine32(const char* key, int32_t* value) const;
7332a0e74681142badb9efd90be3558bd9a943755eMike Reed    bool findDefineScalar(const char* key, SkScalar* value) const;
7457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed
757cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedprotected:
767cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    void setupPaint(SkPaint* paint);
777cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
787cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    virtual const char* onGetName() = 0;
797cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    virtual void onDraw(SkCanvas*) = 0;
807cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
817cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    virtual SkIPoint onGetSize();
827cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
837cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedprivate:
8457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    const SkTDict<const char*>* fDict;
857cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    int     fForceAlpha;
867cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    bool    fForceAA;
877cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    bool    fForceFilter;
8854e0f955c21365271661cd92a29d06a847a18554Mike Reed    SkTriState::State  fDither;
894c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    bool    fHasStrokeWidth;
904c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    SkScalar strokeWidth;
917cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed};
927cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
937cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedtypedef SkTRegistry<SkBenchmark*, void*> BenchRegistry;
947cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
957cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#endif
96