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
diff --git a/tools/PictureBenchmark.h b/tools/PictureBenchmark.h
index 2a14ea2..c3767e1 100644
--- a/tools/PictureBenchmark.h
+++ b/tools/PictureBenchmark.h
@@ -12,6 +12,7 @@
 #include "PictureRenderer.h"
 
 class BenchTimer;
+class SkBenchLogger;
 class SkPicture;
 class SkString;
 
@@ -19,16 +20,16 @@
 
 class PictureBenchmark : public SkRefCnt {
 public:
-    virtual void run(SkPicture* pict) = 0;
+    PictureBenchmark()
+    : fRepeats(1)
+    , fLogger(NULL) {}
+
+    void run(SkPicture* pict);
 
     void setRepeats(int repeats) {
         fRepeats = repeats;
     }
 
-    int getRepeats() const {
-        return fRepeats;
-    }
-
     void setDeviceType(PictureRenderer::SkDeviceTypes deviceType) {
         sk_tools::PictureRenderer* renderer = getRenderer();
 
@@ -37,54 +38,58 @@
         }
     }
 
+    void setLogger(SkBenchLogger* logger) { fLogger = logger; }
+
+private:
+    int            fRepeats;
+    SkBenchLogger* fLogger;
+
+    void logProgress(const char msg[]);
+
+    virtual sk_tools::PictureRenderer* getRenderer() = 0;
+
     BenchTimer* setupTimer();
 
-protected:
-    int fRepeats;
-
-private:
     typedef SkRefCnt INHERITED;
-
-    virtual sk_tools::PictureRenderer* getRenderer() {
-        return NULL;
-    }
 };
 
+// TODO: Use just one PictureBenchmark with different renderers.
+
 class PipePictureBenchmark : public PictureBenchmark {
-public:
-    virtual void run(SkPicture* pict) SK_OVERRIDE;
 private:
     PipePictureRenderer fRenderer;
-    typedef PictureBenchmark INHERITED;
 
     virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
         return &fRenderer;
     }
+
+    typedef PictureBenchmark INHERITED;
 };
 
 class RecordPictureBenchmark : public PictureBenchmark {
-public:
-    virtual void run(SkPicture* pict) SK_OVERRIDE;
 private:
+    RecordPictureRenderer fRenderer;
+
+    virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
+        return &fRenderer;
+    }
+
     typedef PictureBenchmark INHERITED;
 };
 
 class SimplePictureBenchmark : public PictureBenchmark {
-public:
-    virtual void run(SkPicture* pict) SK_OVERRIDE;
 private:
     SimplePictureRenderer fRenderer;
-    typedef PictureBenchmark INHERITED;
 
     virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE {
         return &fRenderer;
     }
+
+    typedef PictureBenchmark INHERITED;
 };
 
 class TiledPictureBenchmark : public PictureBenchmark {
 public:
-    virtual void run(SkPicture* pict) SK_OVERRIDE;
-
     void setTileWidth(int width) {
         fRenderer.setTileWidth(width);
     }
@@ -135,17 +140,22 @@
 
 private:
     TiledPictureRenderer fRenderer;
-    typedef PictureBenchmark INHERITED;
 
     virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
         return &fRenderer;
     }
+
+    typedef PictureBenchmark INHERITED;
 };
 
-class UnflattenPictureBenchmark : public PictureBenchmark {
-public:
-    virtual void run(SkPicture* pict) SK_OVERRIDE;
+class PlaybackCreationBenchmark : public PictureBenchmark {
 private:
+    PlaybackCreationRenderer fRenderer;
+
+    virtual sk_tools::PictureRenderer* getRenderer() SK_OVERRIDE{
+        return &fRenderer;
+    }
+
     typedef PictureBenchmark INHERITED;
 };