Cut down SkBBH API more.
  - The expected case is now a single bulk-load insert() call instead of N;
  - reserve() and flushDeferredInserts() can fold into insert() now;
  - SkBBH subclasses may take ownership of the bounds

This appears to be a performance no-op on both my Mac and N5.  I guess
even the simplest indirect branch predictor ("same as last time") can predict
the repeated virtual calls to SkBBH::insert() perfectly.

BUG=skia:

Review URL: https://codereview.chromium.org/670213002
diff --git a/tests/RTreeTest.cpp b/tests/RTreeTest.cpp
index 6e0622c..5d5c1cb 100644
--- a/tests/RTreeTest.cpp
+++ b/tests/RTreeTest.cpp
@@ -29,12 +29,6 @@
     return rect;
 }
 
-static void random_data_rects(SkRandom& rand, SkRect out[], int n) {
-    for (int i = 0; i < n; ++i) {
-        out[i] = random_rect(rand);
-    }
-}
-
 static bool verify_query(SkRect query, SkRect rects[], SkTDArray<unsigned>& found) {
     // TODO(mtklein): no need to do this after everything's SkRects
     query.roundOut();
@@ -73,9 +67,7 @@
 }
 
 static void rtree_test_main(SkRTree* rtree, skiatest::Reporter* reporter) {
-    SkRect rects[NUM_RECTS];
-    SkRandom rand;
-    REPORTER_ASSERT(reporter, rtree);
+    SkASSERT(rtree);
 
     int expectedDepthMin = -1;
     int expectedDepthMax = -1;
@@ -94,42 +86,23 @@
         ++expectedDepthMax;
     }
 
+    SkRandom rand;
+    SkAutoTMalloc<SkRect> rects(NUM_RECTS);
     for (size_t i = 0; i < NUM_ITERATIONS; ++i) {
-        random_data_rects(rand, rects, NUM_RECTS);
+        rtree->clear();
+        REPORTER_ASSERT(reporter, 0 == rtree->getCount());
 
-        // First try bulk-loaded inserts
-        for (int i = 0; i < NUM_RECTS; ++i) {
-            rtree->insert(i, rects[i], true);
+        for (int j = 0; j < NUM_RECTS; j++) {
+            rects[j] = random_rect(rand);
         }
-        rtree->flushDeferredInserts();
+
+        rtree->insert(&rects, NUM_RECTS);
+        SkASSERT(rects);  // SkRTree doesn't take ownership of rects.
+
         run_queries(reporter, rand, rects, *rtree);
         REPORTER_ASSERT(reporter, NUM_RECTS == rtree->getCount());
         REPORTER_ASSERT(reporter, expectedDepthMin <= rtree->getDepth() &&
                                   expectedDepthMax >= rtree->getDepth());
-        rtree->clear();
-        REPORTER_ASSERT(reporter, 0 == rtree->getCount());
-
-        // Then try immediate inserts
-        for (int i = 0; i < NUM_RECTS; ++i) {
-            rtree->insert(i, rects[i]);
-        }
-        run_queries(reporter, rand, rects, *rtree);
-        REPORTER_ASSERT(reporter, NUM_RECTS == rtree->getCount());
-        REPORTER_ASSERT(reporter, expectedDepthMin <= rtree->getDepth() &&
-                                  expectedDepthMax >= rtree->getDepth());
-        rtree->clear();
-        REPORTER_ASSERT(reporter, 0 == rtree->getCount());
-
-        // And for good measure try immediate inserts, but in reversed order
-        for (int i = NUM_RECTS - 1; i >= 0; --i) {
-            rtree->insert(i, rects[i]);
-        }
-        run_queries(reporter, rand, rects, *rtree);
-        REPORTER_ASSERT(reporter, NUM_RECTS == rtree->getCount());
-        REPORTER_ASSERT(reporter, expectedDepthMin <= rtree->getDepth() &&
-                                  expectedDepthMax >= rtree->getDepth());
-        rtree->clear();
-        REPORTER_ASSERT(reporter, 0 == rtree->getCount());
     }
 }