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:
parent
4b5fba5a3c
commit
506ecc24bf
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user