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