Added the option to enable GPU rendering on render_ and bench_pictures.
authorkeyar@chromium.org <keyar@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 20 Aug 2012 15:04:04 +0000 (15:04 +0000)
committerkeyar@chromium.org <keyar@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 20 Aug 2012 15:04:04 +0000 (15:04 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@5183 2bbb7eff-a529-9590-31e7-b0007b416f81

tools/PictureBenchmark.h
tools/PictureRenderer.h
tools/bench_pictures_main.cpp
tools/render_pictures_main.cpp

index e0fdd7f..1cbc5e7 100644 (file)
@@ -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;
 
index b7e4850..ab0fb36 100644 (file)
@@ -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<SkCanvas> fCanvas;
     SkPicture* fPicture;
     SkDeviceTypes fDeviceType;
index 5fc1bd8..ef0dbf0 100644 (file)
@@ -22,7 +22,12 @@ static void usage(const char* argv0) {
 "Usage: \n"
 "     %s <inputDir>...\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<SkString>*
     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<SkString>*
                 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<SkString>*
     }
 
     benchmark->setRepeats(repeats);
-    benchmark->setUseGpuDevice();
+    benchmark->setDeviceType(deviceType);
 }
 
 static void process_input(const SkString& input, sk_tools::PictureBenchmark& benchmark) {
index e1a1eff..48139ce 100644 (file)
@@ -23,7 +23,12 @@ static void usage(const char* argv0) {
     SkDebugf("\n"
 "Usage: \n"
 "     %s <input>... <outputDir> \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<SkString>*
     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<SkString>*
                 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<SkString>*
         renderer = SkNEW(sk_tools::SimplePictureRenderer);
     }
 
-    renderer->setUseGpuDevice();
+    renderer->setDeviceType(deviceType);
 }
 
 int main(int argc, char* const argv[]) {