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