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