Index: cc/base/rtree.cc |
diff --git a/cc/base/rtree.cc b/cc/base/rtree.cc |
index f4658459f16e97939cd75cd4db2e3d4a2c30d336..18caa713bfa5d724f07cd13e270c89e48cd52827 100644 |
--- a/cc/base/rtree.cc |
+++ b/cc/base/rtree.cc |
@@ -15,12 +15,16 @@ |
namespace cc { |
-RTree::RTree() : num_data_elements_(0u), nodes_(sizeof(Node)) {} |
+RTree::RTree() : num_data_elements_(0u) {} |
RTree::~RTree() {} |
RTree::Node* RTree::AllocateNodeAtLevel(int level) { |
- Node& node = nodes_.AllocateAndConstruct<Node>(); |
+ // We don't allow reallocations, since that would invalidate references to |
+ // existing nodes, so verify that capacity < size. |
danakj
2016/12/19 22:20:50
u mean > ?
vmpstr
2016/12/19 22:51:27
Err yes, thx
|
+ DCHECK_GT(nodes_.capacity(), nodes_.size()); |
+ nodes_.emplace_back(); |
+ Node& node = nodes_.back(); |
node.num_children = 0; |
node.level = level; |
return &node; |
@@ -36,17 +40,17 @@ RTree::Branch RTree::BuildRecursive(std::vector<Branch>* branches, int level) { |
// We might sort our branches here, but we expect Blink gives us a reasonable |
// x,y order. Skipping a call to sort (in Y) here resulted in a 17% win for |
// recording with negligible difference in playback speed. |
- int num_branches = static_cast<int>(branches->size() / MAX_CHILDREN); |
- int remainder = static_cast<int>(branches->size() % MAX_CHILDREN); |
+ int num_branches = static_cast<int>(branches->size() / kMaxChildren); |
+ int remainder = static_cast<int>(branches->size() % kMaxChildren); |
if (remainder > 0) { |
++num_branches; |
// If the remainder isn't enough to fill a node, we'll add fewer nodes to |
// other branches. |
- if (remainder >= MIN_CHILDREN) |
+ if (remainder >= kMinChildren) |
remainder = 0; |
else |
- remainder = MIN_CHILDREN - remainder; |
+ remainder = kMinChildren - remainder; |
} |
int num_strips = static_cast<int>(std::ceil(std::sqrt(num_branches))); |
@@ -58,15 +62,15 @@ RTree::Branch RTree::BuildRecursive(std::vector<Branch>* branches, int level) { |
for (int i = 0; i < num_strips; ++i) { |
// Might be worth sorting by X here too. |
for (int j = 0; j < num_tiles && current_branch < branches->size(); ++j) { |
- int increment_by = MAX_CHILDREN; |
+ int increment_by = kMaxChildren; |
if (remainder != 0) { |
// if need be, omit some nodes to make up for remainder |
- if (remainder <= MAX_CHILDREN - MIN_CHILDREN) { |
+ if (remainder <= kMaxChildren - kMinChildren) { |
increment_by -= remainder; |
remainder = 0; |
} else { |
- increment_by = MIN_CHILDREN; |
- remainder -= MAX_CHILDREN - MIN_CHILDREN; |
+ increment_by = kMinChildren; |
+ remainder -= kMaxChildren - kMinChildren; |
} |
} |
Node* node = AllocateNodeAtLevel(level); |