From c81686cd6edba2cfedcfd5ad6a164f160ddfb49f Mon Sep 17 00:00:00 2001 From: "keyar@chromium.org" Date: Mon, 20 Aug 2012 15:04:04 +0000 Subject: Added the option to enable GPU rendering on render_ and bench_pictures. git-svn-id: http://skia.googlecode.com/svn/trunk@5183 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tools/PictureBenchmark.h | 16 +++----------- tools/PictureRenderer.h | 22 ++++++++------------ tools/bench_pictures_main.cpp | 46 +++++++++++++++++++++++++++++++++++++++-- tools/render_pictures_main.cpp | 47 ++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 101 insertions(+), 30 deletions(-) diff --git a/tools/PictureBenchmark.h b/tools/PictureBenchmark.h index e0fdd7fab2..1cbc5e763c 100644 --- a/tools/PictureBenchmark.h +++ b/tools/PictureBenchmark.h @@ -29,26 +29,16 @@ public: return fRepeats; } - void setUseBitmapDevice() { - sk_tools::PictureRenderer* renderer = getRenderer(); + void setDeviceType(PictureRenderer::SkDeviceTypes deviceType) { + sk_tools::PictureRenderer* renderer = getRenderer(); if (renderer != NULL) { - renderer->setUseBitmapDevice(); + renderer->setDeviceType(deviceType); } } BenchTimer* setupTimer(); -#if SK_SUPPORT_GPU - void setUseGpuDevice() { - sk_tools::PictureRenderer* renderer = getRenderer(); - - if (renderer != NULL) { - renderer->setUseGpuDevice(); - } - } -#endif - protected: int fRepeats; diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h index b7e4850606..ab0fb36675 100644 --- a/tools/PictureRenderer.h +++ b/tools/PictureRenderer.h @@ -25,6 +25,13 @@ namespace sk_tools { class PictureRenderer : public SkRefCnt { public: + enum SkDeviceTypes { + kBitmap_DeviceType, +#if SK_SUPPORT_GPU + kGPU_DeviceType +#endif + }; + virtual void init(SkPicture* pict); virtual void render() = 0; virtual void end(); @@ -34,8 +41,8 @@ public: return fCanvas.get(); } - void setUseBitmapDevice() { - fDeviceType = kBitmap_DeviceType; + void setDeviceType(SkDeviceTypes deviceType) { + fDeviceType = deviceType; } bool isUsingBitmapDevice() { @@ -43,10 +50,6 @@ public: } #if SK_SUPPORT_GPU - void setUseGpuDevice() { - fDeviceType = kGPU_DeviceType; - } - bool isUsingGpuDevice() { return kGPU_DeviceType == fDeviceType; } @@ -72,13 +75,6 @@ protected: SkCanvas* setupCanvas(); SkCanvas* setupCanvas(int width, int height); - enum SkDeviceTypes { - kBitmap_DeviceType, -#if SK_SUPPORT_GPU - kGPU_DeviceType -#endif - }; - SkAutoTUnref fCanvas; SkPicture* fPicture; SkDeviceTypes fDeviceType; diff --git a/tools/bench_pictures_main.cpp b/tools/bench_pictures_main.cpp index 5fc1bd8a3b..ef0dbf0207 100644 --- a/tools/bench_pictures_main.cpp +++ b/tools/bench_pictures_main.cpp @@ -22,7 +22,12 @@ static void usage(const char* argv0) { "Usage: \n" " %s ...\n" " [--repeat] \n" -" [--mode pipe | record | simple | tile width[%] height[%] | unflatten]" +" [--mode pipe | record | simple | tile width[%] height[%] | unflatten]\n" +" [--device bitmap" +#if SK_SUPPORT_GPU +" | gpu" +#endif +"]" , argv0); SkDebugf("\n\n"); SkDebugf( @@ -44,6 +49,19 @@ static void usage(const char* argv0) { " unflatten, Benchmark picture unflattening.\n"); SkDebugf("\n"); SkDebugf( +" --device bitmap" +#if SK_SUPPORT_GPU +" | gpu" +#endif +": Use the corresponding device. Default is bitmap.\n"); + SkDebugf( +" bitmap, Render to a bitmap.\n"); + SkDebugf( +#if SK_SUPPORT_GPU +" gpu, Render to the GPU.\n"); +#endif + SkDebugf("\n"); + SkDebugf( " --repeat: " "Set the number of times to repeat each test." " Default is %i.\n", DEFAULT_REPEATS); @@ -75,6 +93,8 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* char* const* stop = argv + argc; int repeats = DEFAULT_REPEATS; + sk_tools::PictureRenderer::SkDeviceTypes deviceType = + sk_tools::PictureRenderer::kBitmap_DeviceType; for (++argv; argv < stop; ++argv) { if (0 == strcmp(*argv, "--repeat")) { @@ -167,6 +187,28 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* usage(argv0); exit(-1); } + } else if (0 == strcmp(*argv, "--device")) { + ++argv; + if (argv >= stop) { + SkDebugf("Missing mode for --deivce\n"); + usage(argv0); + exit(-1); + } + + if (0 == strcmp(*argv, "bitmap")) { + deviceType = sk_tools::PictureRenderer::kBitmap_DeviceType; + } +#if SK_SUPPORT_GPU + else if (0 == strcmp(*argv, "gpu")) { + deviceType = sk_tools::PictureRenderer::kGPU_DeviceType; + } +#endif + else { + SkDebugf("%s is not a valid mode for --device\n", *argv); + usage(argv0); + exit(-1); + } + } else if (0 == strcmp(*argv, "--help") || 0 == strcmp(*argv, "-h")) { SkDELETE(benchmark); usage(argv0); @@ -187,7 +229,7 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* } benchmark->setRepeats(repeats); - benchmark->setUseGpuDevice(); + benchmark->setDeviceType(deviceType); } static void process_input(const SkString& input, sk_tools::PictureBenchmark& benchmark) { diff --git a/tools/render_pictures_main.cpp b/tools/render_pictures_main.cpp index e1a1eff6eb..48139cebff 100644 --- a/tools/render_pictures_main.cpp +++ b/tools/render_pictures_main.cpp @@ -23,7 +23,12 @@ static void usage(const char* argv0) { SkDebugf("\n" "Usage: \n" " %s ... \n" -" [--mode pipe | simple | tile width[%] height[%]]" +" [--mode pipe | simple | tile width[%] height[%]]\n" +" [--device bitmap" +#if SK_SUPPORT_GPU +" | gpu" +#endif +"]" , argv0); SkDebugf("\n\n"); SkDebugf( @@ -41,6 +46,19 @@ static void usage(const char* argv0) { SkDebugf( " tile width[%] height[%], Do a simple render using tiles\n" " with the given dimensions.\n"); + SkDebugf("\n"); + SkDebugf( +" --device bitmap" +#if SK_SUPPORT_GPU +" | gpu" +#endif +": Use the corresponding device. Default is bitmap.\n"); + SkDebugf( +" bitmap, Render to a bitmap.\n"); + SkDebugf( +#if SK_SUPPORT_GPU +" gpu, Render to the GPU.\n"); +#endif } static void make_output_filepath(SkString* path, const SkString& dir, @@ -129,6 +147,9 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* const char* argv0 = argv[0]; char* const* stop = argv + argc; + sk_tools::PictureRenderer::SkDeviceTypes deviceType = + sk_tools::PictureRenderer::kBitmap_DeviceType; + for (++argv; argv < stop; ++argv) { if (0 == strcmp(*argv, "--mode")) { SkDELETE(renderer); @@ -202,6 +223,28 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* usage(argv0); exit(-1); } + } else if (0 == strcmp(*argv, "--device")) { + ++argv; + if (argv >= stop) { + SkDebugf("Missing mode for --deivce\n"); + usage(argv0); + exit(-1); + } + + if (0 == strcmp(*argv, "bitmap")) { + deviceType = sk_tools::PictureRenderer::kBitmap_DeviceType; + } +#if SK_SUPPORT_GPU + else if (0 == strcmp(*argv, "gpu")) { + deviceType = sk_tools::PictureRenderer::kGPU_DeviceType; + } +#endif + else { + SkDebugf("%s is not a valid mode for --device\n", *argv); + usage(argv0); + exit(-1); + } + } else if ((0 == strcmp(*argv, "-h")) || (0 == strcmp(*argv, "--help"))) { SkDELETE(renderer); usage(argv0); @@ -221,7 +264,7 @@ static void parse_commandline(int argc, char* const argv[], SkTArray* renderer = SkNEW(sk_tools::SimplePictureRenderer); } - renderer->setUseGpuDevice(); + renderer->setDeviceType(deviceType); } int main(int argc, char* const argv[]) { -- cgit v1.2.3