For comparison, add std::vector.

Where I've tested, it's second-place to SkTDArray, though the closest API equivalent in our code is SkTArray, which it's significantly faster than.  This is probably a good approximation to how fast we can possibly make something like SkTArray that constructs and destroys its values.  In fact, it might be worth trying making SkTArray a thin shim over std::vector.

BUG=
R=bsalomon@google.com, caryclark@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/127223004

git-svn-id: http://skia.googlecode.com/svn/trunk@12969 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-01-08 21:16:04 +00:00
parent 4b5fba5a3c
commit 506ecc24bf

View File

@ -12,6 +12,7 @@
#include "SkDeque.h"
#include "SkTArray.h"
#include "SkTDArray.h"
#include <vector>
// This file has several benchmarks using various data structures to do stack-like things:
// - push
@ -78,6 +79,16 @@ BENCH(TDArray_Serial) {
}
}
BENCH(vector_Serial) {
std::vector<int> s;
for (int i = 0; i < K; i++) s.push_back(i);
volatile int junk = 0;
for (int j = 0; j < loops; j++) {
for (size_t i = 0; i < s.size(); i++) junk += s[i];
}
}
// Add K items, then randomly access them many times.
BENCH(TArray_RandomAccess) {
@ -102,6 +113,17 @@ BENCH(TDArray_RandomAccess) {
}
}
BENCH(vector_RandomAccess) {
std::vector<int> s;
for (int i = 0; i < K; i++) s.push_back(i);
SkRandom rand;
volatile int junk = 0;
for (int i = 0; i < K*loops; i++) {
junk += s[rand.nextULessThan(K)];
}
}
// Push many times.
BENCH(ChunkAlloc_Push) {
@ -124,6 +146,11 @@ BENCH(TDArray_Push) {
for (int i = 0; i < K*loops; i++) s.push(i);
}
BENCH(vector_Push) {
std::vector<int> s;
for (int i = 0; i < K*loops; i++) s.push_back(i);
}
// Push then immediately pop many times.
BENCH(ChunkAlloc_PushPop) {
@ -158,6 +185,14 @@ BENCH(TDArray_PushPop) {
}
}
BENCH(vector_PushPop) {
std::vector<int> s;
for (int i = 0; i < K*loops; i++) {
s.push_back(i);
s.pop_back();
}
}
// Push many items, then pop them all.
BENCH(Deque_PushAllPopAll) {
@ -177,3 +212,9 @@ BENCH(TDArray_PushAllPopAll) {
for (int i = 0; i < K*loops; i++) s.push(i);
for (int i = 0; i < K*loops; i++) s.pop();
}
BENCH(vector_PushAllPopAll) {
std::vector<int> s;
for (int i = 0; i < K*loops; i++) s.push_back(i);
for (int i = 0; i < K*loops; i++) s.pop_back();
}