xref: /aosp_15_r20/frameworks/native/opengl/tests/gralloc/gralloc.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
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