| Index: tools/render_pictures_main.cpp
 | 
| ===================================================================
 | 
| --- tools/render_pictures_main.cpp	(revision 8119)
 | 
| +++ tools/render_pictures_main.cpp	(working copy)
 | 
| @@ -35,7 +35,8 @@
 | 
|  DEFINE_bool(writeWholeImage, false, "In tile mode, write the entire rendered image to a "
 | 
|              "file, instead of an image for each tile.");
 | 
|  DEFINE_bool(validate, false, "Verify that the rendered image contains the same pixels as "
 | 
| -            "the picture rendered in simple mode.");
 | 
| +            "the picture rendered in simple mode. When used in conjunction with --bbh, results "
 | 
| +            "are validated against the picture rendered in the same mode, but without the bbh.");
 | 
|  
 | 
|  static void make_output_filepath(SkString* path, const SkString& dir,
 | 
|                                   const SkString& name) {
 | 
| @@ -142,6 +143,32 @@
 | 
|                     SkMax32(abs(getByte(v1, 2) - getByte(v2, 2)), abs(getByte(v1, 3) - getByte(v2, 3))));
 | 
|  }
 | 
|  
 | 
| +namespace {
 | 
| +class AutoRestoreBbhType {
 | 
| +public:
 | 
| +    AutoRestoreBbhType() {
 | 
| +        fRenderer = NULL;
 | 
| +    }
 | 
| +
 | 
| +    void set(sk_tools::PictureRenderer* renderer,
 | 
| +             sk_tools::PictureRenderer::BBoxHierarchyType bbhType) {
 | 
| +        fRenderer = renderer;
 | 
| +        fSavedBbhType = renderer->getBBoxHierarchyType();
 | 
| +        renderer->setBBoxHierarchyType(bbhType);
 | 
| +    }
 | 
| +
 | 
| +    ~AutoRestoreBbhType() {
 | 
| +        if (NULL != fRenderer) {
 | 
| +            fRenderer->setBBoxHierarchyType(fSavedBbhType);
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
| +private:
 | 
| +    sk_tools::PictureRenderer* fRenderer;
 | 
| +    sk_tools::PictureRenderer::BBoxHierarchyType fSavedBbhType;
 | 
| +};
 | 
| +}
 | 
| +
 | 
|  static bool render_picture(const SkString& inputPath, const SkString* outputDir,
 | 
|                             sk_tools::PictureRenderer& renderer) {
 | 
|      int diffs[256] = {0};
 | 
| @@ -159,8 +186,21 @@
 | 
|  
 | 
|      if (FLAGS_validate) {
 | 
|          SkBitmap* referenceBitmap = NULL;
 | 
| -        sk_tools::SimplePictureRenderer referenceRenderer;
 | 
| -        success = render_picture(inputPath, NULL, referenceRenderer,
 | 
| +        sk_tools::PictureRenderer* referenceRenderer;
 | 
| +        // If the renderer uses a BBoxHierarchy, then the reference renderer
 | 
| +        // will be the same renderer, without the bbh. 
 | 
| +        AutoRestoreBbhType arbbh;
 | 
| +        if (sk_tools::PictureRenderer::kNone_BBoxHierarchyType !=
 | 
| +            renderer.getBBoxHierarchyType()) {
 | 
| +            referenceRenderer = &renderer;
 | 
| +            referenceRenderer->ref();  // to match auto unref below
 | 
| +            arbbh.set(referenceRenderer, sk_tools::PictureRenderer::kNone_BBoxHierarchyType);
 | 
| +        } else {
 | 
| +            referenceRenderer = SkNEW(sk_tools::SimplePictureRenderer);
 | 
| +        }
 | 
| +        SkAutoTUnref<sk_tools::PictureRenderer> aurReferenceRenderer(referenceRenderer);
 | 
| +
 | 
| +        success = render_picture(inputPath, NULL, *referenceRenderer,
 | 
|                                   &referenceBitmap);
 | 
|  
 | 
|          if (!success || NULL == referenceBitmap || NULL == referenceBitmap->getPixels()) {
 | 
| 
 |