skia2/tools/PictureBenchmark.h
scroggo@google.com 9a4125283a Report data from bench_pictures in the same fashion as bench.
Move SkBenchLogger into separate files and make bench_pictures use it.
Remove sk_tools::print_msg, since SkBenchLogger is now used instead.

Combine picture_benchmark with bench_pictures, since that is the
only project that uses it.

Refactor the aggregator for bench timer data into its own class and
make bench_pictures use it.

Consolidate the various virtual PictureBenchmark::run functions
into one for reuse.

BUG=https://code.google.com/p/skia/issues/detail?id=822

Review URL: https://codereview.appspot.com/6488086

git-svn-id: http://skia.googlecode.com/svn/trunk@5432 2bbb7eff-a529-9590-31e7-b0007b416f81
2012-09-07 15:21:18 +00:00

165 lines
3.5 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 PictureBenchmark_DEFINED
#define PictureBenchmark_DEFINED
#include "SkTypes.h"
#include "SkRefCnt.h"
#include "PictureRenderer.h"
class BenchTimer;
class SkBenchLogger;
class SkPicture;
class SkString;
namespace sk_tools {
class PictureBenchmark : public SkRefCnt {
public:
PictureBenchmark()
: fRepeats(1)
, fLogger(NULL) {}
void run(SkPicture* pict);
void setRepeats(int repeats) {
fRepeats = repeats;
}
void setDeviceType(PictureRenderer::SkDeviceTypes deviceType) {
sk_tools::PictureRenderer* renderer = getRenderer();
if (renderer != NULL) {
renderer->setDeviceType(deviceType);
}
}
void setLogger(SkBenchLogger* logger) { fLogger = logger; }
private:
int fRepeats;
SkBenchLogger* fLogger;
void logProgress(const char msg[]);
virtual sk_tools::PictureRenderer* getRenderer() = 0;
BenchTimer* setupTimer();
typedef SkRefCnt INHERITED;
};
// TODO: Use just one PictureBenchmark with different renderers.
class PipePictureBenchmark : public PictureBenchmark {
private:
PipePictureRenderer fRenderer;
virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
return &fRenderer;
}
typedef PictureBenchmark INHERITED;
};
class RecordPictureBenchmark : public PictureBenchmark {
private:
RecordPictureRenderer fRenderer;
virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
return &fRenderer;
}
typedef PictureBenchmark INHERITED;
};
class SimplePictureBenchmark : public PictureBenchmark {
private:
SimplePictureRenderer fRenderer;
virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
return &fRenderer;
}
typedef PictureBenchmark INHERITED;
};
class TiledPictureBenchmark : public PictureBenchmark {
public:
void setTileWidth(int width) {
fRenderer.setTileWidth(width);
}
int getTileWidth() const {
return fRenderer.getTileWidth();
}
void setTileHeight(int height) {
fRenderer.setTileHeight(height);
}
int getTileHeight() const {
return fRenderer.getTileHeight();
}
void setTileWidthPercentage(double percentage) {
fRenderer.setTileWidthPercentage(percentage);
}
double getTileWidthPercentage() const {
return fRenderer.getTileWidthPercentage();
}
void setTileHeightPercentage(double percentage) {
fRenderer.setTileHeightPercentage(percentage);
}
double getTileHeightPercentage() const {
return fRenderer.getTileHeightPercentage();
}
void setTileMinPowerOf2Width(int width) {
fRenderer.setTileMinPowerOf2Width(width);
}
int getTileMinPowerOf2Width() {
return fRenderer.getTileMinPowerOf2Width();
}
void setThreading(bool multi) {
fRenderer.setMultiThreaded(multi);
}
void setUsePipe(bool usePipe) {
fRenderer.setUsePipe(usePipe);
}
private:
TiledPictureRenderer fRenderer;
virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
return &fRenderer;
}
typedef PictureBenchmark INHERITED;
};
class PlaybackCreationBenchmark : public PictureBenchmark {
private:
PlaybackCreationRenderer fRenderer;
virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
return &fRenderer;
}
typedef PictureBenchmark INHERITED;
};
}
#endif // PictureBenchmark_DEFINED