1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker **
3*38e8c45fSAndroid Build Coastguard Worker ** Copyright 2009, The Android Open Source Project
4*38e8c45fSAndroid Build Coastguard Worker **
5*38e8c45fSAndroid Build Coastguard Worker ** Licensed under the Apache License, Version 2.0 (the "License");
6*38e8c45fSAndroid Build Coastguard Worker ** you may not use this file except in compliance with the License.
7*38e8c45fSAndroid Build Coastguard Worker ** You may obtain a copy of the License at
8*38e8c45fSAndroid Build Coastguard Worker **
9*38e8c45fSAndroid Build Coastguard Worker ** http://www.apache.org/licenses/LICENSE-2.0
10*38e8c45fSAndroid Build Coastguard Worker **
11*38e8c45fSAndroid Build Coastguard Worker ** Unless required by applicable law or agreed to in writing, software
12*38e8c45fSAndroid Build Coastguard Worker ** distributed under the License is distributed on an "AS IS" BASIS,
13*38e8c45fSAndroid Build Coastguard Worker ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*38e8c45fSAndroid Build Coastguard Worker ** See the License for the specific language governing permissions and
15*38e8c45fSAndroid Build Coastguard Worker ** limitations under the License.
16*38e8c45fSAndroid Build Coastguard Worker */
17*38e8c45fSAndroid Build Coastguard Worker
18*38e8c45fSAndroid Build Coastguard Worker #define LOG_TAG "StopWatch"
19*38e8c45fSAndroid Build Coastguard Worker
20*38e8c45fSAndroid Build Coastguard Worker #include <stdlib.h>
21*38e8c45fSAndroid Build Coastguard Worker #include <stdio.h>
22*38e8c45fSAndroid Build Coastguard Worker #include <utils/StopWatch.h>
23*38e8c45fSAndroid Build Coastguard Worker #include <utils/Log.h>
24*38e8c45fSAndroid Build Coastguard Worker
25*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBuffer.h>
26*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBufferMapper.h>
27*38e8c45fSAndroid Build Coastguard Worker
28*38e8c45fSAndroid Build Coastguard Worker using namespace android;
29*38e8c45fSAndroid Build Coastguard Worker
lamecpy(void * d,void const * s,size_t size)30*38e8c45fSAndroid Build Coastguard Worker void* lamecpy(void* d, void const* s, size_t size) {
31*38e8c45fSAndroid Build Coastguard Worker char* dst = (char*)d;
32*38e8c45fSAndroid Build Coastguard Worker char const* src = (char const*)s;
33*38e8c45fSAndroid Build Coastguard Worker while (size) {
34*38e8c45fSAndroid Build Coastguard Worker *dst++ = *src++;
35*38e8c45fSAndroid Build Coastguard Worker size--;
36*38e8c45fSAndroid Build Coastguard Worker }
37*38e8c45fSAndroid Build Coastguard Worker return d;
38*38e8c45fSAndroid Build Coastguard Worker }
39*38e8c45fSAndroid Build Coastguard Worker
main(int,char **)40*38e8c45fSAndroid Build Coastguard Worker int main(int /*argc*/, char** /*argv*/)
41*38e8c45fSAndroid Build Coastguard Worker {
42*38e8c45fSAndroid Build Coastguard Worker size_t size = 128*256*4;
43*38e8c45fSAndroid Build Coastguard Worker void* temp = malloc(size);
44*38e8c45fSAndroid Build Coastguard Worker void* temp2 = malloc(size);
45*38e8c45fSAndroid Build Coastguard Worker memset(temp, 0, size);
46*38e8c45fSAndroid Build Coastguard Worker memset(temp2, 0, size);
47*38e8c45fSAndroid Build Coastguard Worker
48*38e8c45fSAndroid Build Coastguard Worker
49*38e8c45fSAndroid Build Coastguard Worker sp<GraphicBuffer> buffer = new GraphicBuffer(128, 256, HAL_PIXEL_FORMAT_RGBA_8888,
50*38e8c45fSAndroid Build Coastguard Worker GRALLOC_USAGE_SW_READ_OFTEN |
51*38e8c45fSAndroid Build Coastguard Worker GRALLOC_USAGE_SW_WRITE_OFTEN);
52*38e8c45fSAndroid Build Coastguard Worker
53*38e8c45fSAndroid Build Coastguard Worker status_t err = buffer->initCheck();
54*38e8c45fSAndroid Build Coastguard Worker if (err != NO_ERROR) {
55*38e8c45fSAndroid Build Coastguard Worker printf("%s\n", strerror(-err));
56*38e8c45fSAndroid Build Coastguard Worker return 0;
57*38e8c45fSAndroid Build Coastguard Worker }
58*38e8c45fSAndroid Build Coastguard Worker
59*38e8c45fSAndroid Build Coastguard Worker void* vaddr;
60*38e8c45fSAndroid Build Coastguard Worker buffer->lock(
61*38e8c45fSAndroid Build Coastguard Worker GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
62*38e8c45fSAndroid Build Coastguard Worker &vaddr);
63*38e8c45fSAndroid Build Coastguard Worker
64*38e8c45fSAndroid Build Coastguard Worker {
65*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("memset");
66*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
67*38e8c45fSAndroid Build Coastguard Worker memset(vaddr, 0, size);
68*38e8c45fSAndroid Build Coastguard Worker }
69*38e8c45fSAndroid Build Coastguard Worker
70*38e8c45fSAndroid Build Coastguard Worker {
71*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("memcpy baseline");
72*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
73*38e8c45fSAndroid Build Coastguard Worker memcpy(temp, temp2, size);
74*38e8c45fSAndroid Build Coastguard Worker }
75*38e8c45fSAndroid Build Coastguard Worker
76*38e8c45fSAndroid Build Coastguard Worker {
77*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("memcpy from gralloc");
78*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
79*38e8c45fSAndroid Build Coastguard Worker memcpy(temp, vaddr, size);
80*38e8c45fSAndroid Build Coastguard Worker }
81*38e8c45fSAndroid Build Coastguard Worker
82*38e8c45fSAndroid Build Coastguard Worker {
83*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("memcpy into gralloc");
84*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
85*38e8c45fSAndroid Build Coastguard Worker memcpy(vaddr, temp, size);
86*38e8c45fSAndroid Build Coastguard Worker }
87*38e8c45fSAndroid Build Coastguard Worker
88*38e8c45fSAndroid Build Coastguard Worker
89*38e8c45fSAndroid Build Coastguard Worker {
90*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("lamecpy baseline");
91*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
92*38e8c45fSAndroid Build Coastguard Worker lamecpy(temp, temp2, size);
93*38e8c45fSAndroid Build Coastguard Worker }
94*38e8c45fSAndroid Build Coastguard Worker
95*38e8c45fSAndroid Build Coastguard Worker {
96*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("lamecpy from gralloc");
97*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
98*38e8c45fSAndroid Build Coastguard Worker lamecpy(temp, vaddr, size);
99*38e8c45fSAndroid Build Coastguard Worker }
100*38e8c45fSAndroid Build Coastguard Worker
101*38e8c45fSAndroid Build Coastguard Worker {
102*38e8c45fSAndroid Build Coastguard Worker StopWatch watch("lamecpy into gralloc");
103*38e8c45fSAndroid Build Coastguard Worker for (int i=0 ; i<10 ; i++)
104*38e8c45fSAndroid Build Coastguard Worker lamecpy(vaddr, temp, size);
105*38e8c45fSAndroid Build Coastguard Worker }
106*38e8c45fSAndroid Build Coastguard Worker
107*38e8c45fSAndroid Build Coastguard Worker buffer->unlock();
108*38e8c45fSAndroid Build Coastguard Worker
109*38e8c45fSAndroid Build Coastguard Worker return 0;
110*38e8c45fSAndroid Build Coastguard Worker }
111