latency.cpp revision 943eb670c86242755f5af7460d46578243e0401e
1943eb670c86242755f5af7460d46578243e0401eTim Murray#include "RenderScript.h"
2943eb670c86242755f5af7460d46578243e0401eTim Murray#include <sys/time.h>
3943eb670c86242755f5af7460d46578243e0401eTim Murray
4943eb670c86242755f5af7460d46578243e0401eTim Murray#include "ScriptC_latency.h"
5943eb670c86242755f5af7460d46578243e0401eTim Murray
6943eb670c86242755f5af7460d46578243e0401eTim Murrayusing namespace android;
7943eb670c86242755f5af7460d46578243e0401eTim Murrayusing namespace renderscriptCpp;
8943eb670c86242755f5af7460d46578243e0401eTim Murray
9943eb670c86242755f5af7460d46578243e0401eTim Murrayint main(int argc, char** argv)
10943eb670c86242755f5af7460d46578243e0401eTim Murray{
11943eb670c86242755f5af7460d46578243e0401eTim Murray    int iters = 100;
12943eb670c86242755f5af7460d46578243e0401eTim Murray
13943eb670c86242755f5af7460d46578243e0401eTim Murray    int numElems = 1000;
14943eb670c86242755f5af7460d46578243e0401eTim Murray
15943eb670c86242755f5af7460d46578243e0401eTim Murray    if (argc >= 2) {
16943eb670c86242755f5af7460d46578243e0401eTim Murray        iters = atoi(argv[1]);
17943eb670c86242755f5af7460d46578243e0401eTim Murray        if (iters <= 0) {
18943eb670c86242755f5af7460d46578243e0401eTim Murray            printf("iters must be positive\n");
19943eb670c86242755f5af7460d46578243e0401eTim Murray            return 1;
20943eb670c86242755f5af7460d46578243e0401eTim Murray        }
21943eb670c86242755f5af7460d46578243e0401eTim Murray    }
22943eb670c86242755f5af7460d46578243e0401eTim Murray
23943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("iters = %d\n", iters);
24943eb670c86242755f5af7460d46578243e0401eTim Murray
25943eb670c86242755f5af7460d46578243e0401eTim Murray    if (argc >= 3) {
26943eb670c86242755f5af7460d46578243e0401eTim Murray        numElems = atoi(argv[2]);
27943eb670c86242755f5af7460d46578243e0401eTim Murray        if (numElems <= 0) {
28943eb670c86242755f5af7460d46578243e0401eTim Murray            printf("numElems must be positive\n");
29943eb670c86242755f5af7460d46578243e0401eTim Murray            return 1;
30943eb670c86242755f5af7460d46578243e0401eTim Murray        }
31943eb670c86242755f5af7460d46578243e0401eTim Murray    }
32943eb670c86242755f5af7460d46578243e0401eTim Murray
33943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("numElems = %d\n", numElems);
34943eb670c86242755f5af7460d46578243e0401eTim Murray
35943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<RS> rs = new RS();
36943eb670c86242755f5af7460d46578243e0401eTim Murray
37943eb670c86242755f5af7460d46578243e0401eTim Murray    bool r = rs->init(true); // force CPU execution
38943eb670c86242755f5af7460d46578243e0401eTim Murray
39943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<const Element> e = Element::U32(rs);
40943eb670c86242755f5af7460d46578243e0401eTim Murray
41943eb670c86242755f5af7460d46578243e0401eTim Murray    Type::Builder tb(rs, e);
42943eb670c86242755f5af7460d46578243e0401eTim Murray    tb.setX(numElems);
43943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<const Type> t = tb.create();
44943eb670c86242755f5af7460d46578243e0401eTim Murray
45943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<Allocation> ain = Allocation::createTyped(rs, t);
46943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<Allocation> aout = Allocation::createTyped(rs, t);
47943eb670c86242755f5af7460d46578243e0401eTim Murray
48943eb670c86242755f5af7460d46578243e0401eTim Murray    sp<ScriptC_latency> sc = new ScriptC_latency(rs, NULL, 0);
49943eb670c86242755f5af7460d46578243e0401eTim Murray
50943eb670c86242755f5af7460d46578243e0401eTim Murray    struct timeval start, stop;
51943eb670c86242755f5af7460d46578243e0401eTim Murray
52943eb670c86242755f5af7460d46578243e0401eTim Murray    gettimeofday(&start, NULL);
53943eb670c86242755f5af7460d46578243e0401eTim Murray
54943eb670c86242755f5af7460d46578243e0401eTim Murray    for (int i = 0; i < iters; i++) {
55943eb670c86242755f5af7460d46578243e0401eTim Murray        sc->forEach_root(ain, aout);
56943eb670c86242755f5af7460d46578243e0401eTim Murray    }
57943eb670c86242755f5af7460d46578243e0401eTim Murray
58943eb670c86242755f5af7460d46578243e0401eTim Murray    uint32_t temp;
59943eb670c86242755f5af7460d46578243e0401eTim Murray
60943eb670c86242755f5af7460d46578243e0401eTim Murray    aout->copy1DRangeFromUnchecked(0, 1, &temp, sizeof(temp));
61943eb670c86242755f5af7460d46578243e0401eTim Murray
62943eb670c86242755f5af7460d46578243e0401eTim Murray    gettimeofday(&stop, NULL);
63943eb670c86242755f5af7460d46578243e0401eTim Murray
64943eb670c86242755f5af7460d46578243e0401eTim Murray    long long elapsed = (stop.tv_sec * 1000000) - (start.tv_sec * 1000000) + (stop.tv_usec - start.tv_usec);
65943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("elapsed time : %lld microseconds\n", elapsed);
66943eb670c86242755f5af7460d46578243e0401eTim Murray    printf("time per iter: %f microseconds\n", (double)elapsed / iters);
67943eb670c86242755f5af7460d46578243e0401eTim Murray
68943eb670c86242755f5af7460d46578243e0401eTim Murray    sc.clear();
69943eb670c86242755f5af7460d46578243e0401eTim Murray    t.clear();
70943eb670c86242755f5af7460d46578243e0401eTim Murray    e.clear();
71943eb670c86242755f5af7460d46578243e0401eTim Murray    ain.clear();
72943eb670c86242755f5af7460d46578243e0401eTim Murray    aout.clear();
73943eb670c86242755f5af7460d46578243e0401eTim Murray}
74