17460160b801b4230f20722efbafcac347312e702Mathias Agopian/*
27460160b801b4230f20722efbafcac347312e702Mathias Agopian **
37460160b801b4230f20722efbafcac347312e702Mathias Agopian ** Copyright 2009, The Android Open Source Project
47460160b801b4230f20722efbafcac347312e702Mathias Agopian **
57460160b801b4230f20722efbafcac347312e702Mathias Agopian ** Licensed under the Apache License, Version 2.0 (the "License");
67460160b801b4230f20722efbafcac347312e702Mathias Agopian ** you may not use this file except in compliance with the License.
77460160b801b4230f20722efbafcac347312e702Mathias Agopian ** You may obtain a copy of the License at
87460160b801b4230f20722efbafcac347312e702Mathias Agopian **
97460160b801b4230f20722efbafcac347312e702Mathias Agopian **     http://www.apache.org/licenses/LICENSE-2.0
107460160b801b4230f20722efbafcac347312e702Mathias Agopian **
117460160b801b4230f20722efbafcac347312e702Mathias Agopian ** Unless required by applicable law or agreed to in writing, software
127460160b801b4230f20722efbafcac347312e702Mathias Agopian ** distributed under the License is distributed on an "AS IS" BASIS,
137460160b801b4230f20722efbafcac347312e702Mathias Agopian ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
147460160b801b4230f20722efbafcac347312e702Mathias Agopian ** See the License for the specific language governing permissions and
157460160b801b4230f20722efbafcac347312e702Mathias Agopian ** limitations under the License.
167460160b801b4230f20722efbafcac347312e702Mathias Agopian */
177460160b801b4230f20722efbafcac347312e702Mathias Agopian
187460160b801b4230f20722efbafcac347312e702Mathias Agopian#define LOG_TAG "StopWatch"
197460160b801b4230f20722efbafcac347312e702Mathias Agopian
207460160b801b4230f20722efbafcac347312e702Mathias Agopian#include <stdlib.h>
217460160b801b4230f20722efbafcac347312e702Mathias Agopian#include <stdio.h>
227460160b801b4230f20722efbafcac347312e702Mathias Agopian#include <utils/StopWatch.h>
237460160b801b4230f20722efbafcac347312e702Mathias Agopian#include <utils/Log.h>
247460160b801b4230f20722efbafcac347312e702Mathias Agopian
253330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBuffer.h>
263330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBufferMapper.h>
277460160b801b4230f20722efbafcac347312e702Mathias Agopian
287460160b801b4230f20722efbafcac347312e702Mathias Agopianusing namespace android;
297460160b801b4230f20722efbafcac347312e702Mathias Agopian
307460160b801b4230f20722efbafcac347312e702Mathias Agopianvoid* lamecpy(void* d, void const* s, size_t size) {
317460160b801b4230f20722efbafcac347312e702Mathias Agopian    char* dst = (char*)d;
327460160b801b4230f20722efbafcac347312e702Mathias Agopian    char const* src = (char const*)s;
337460160b801b4230f20722efbafcac347312e702Mathias Agopian    while (size) {
347460160b801b4230f20722efbafcac347312e702Mathias Agopian        *dst++ = *src++;
357460160b801b4230f20722efbafcac347312e702Mathias Agopian        size--;
367460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
377460160b801b4230f20722efbafcac347312e702Mathias Agopian    return d;
387460160b801b4230f20722efbafcac347312e702Mathias Agopian}
397460160b801b4230f20722efbafcac347312e702Mathias Agopian
407460160b801b4230f20722efbafcac347312e702Mathias Agopianint main(int argc, char** argv)
417460160b801b4230f20722efbafcac347312e702Mathias Agopian{
427460160b801b4230f20722efbafcac347312e702Mathias Agopian    size_t size = 128*256*4;
437460160b801b4230f20722efbafcac347312e702Mathias Agopian    void* temp = malloc(size);
447460160b801b4230f20722efbafcac347312e702Mathias Agopian    void* temp2 = malloc(size);
457460160b801b4230f20722efbafcac347312e702Mathias Agopian    memset(temp, 0, size);
467460160b801b4230f20722efbafcac347312e702Mathias Agopian    memset(temp2, 0, size);
477460160b801b4230f20722efbafcac347312e702Mathias Agopian
487460160b801b4230f20722efbafcac347312e702Mathias Agopian
493330b203039dea366d4981db1408a460134b2d2cMathias Agopian    sp<GraphicBuffer> buffer = new GraphicBuffer(128, 256, HAL_PIXEL_FORMAT_RGBA_8888,
507460160b801b4230f20722efbafcac347312e702Mathias Agopian            GRALLOC_USAGE_SW_READ_OFTEN |
517460160b801b4230f20722efbafcac347312e702Mathias Agopian            GRALLOC_USAGE_SW_WRITE_OFTEN);
527460160b801b4230f20722efbafcac347312e702Mathias Agopian
537460160b801b4230f20722efbafcac347312e702Mathias Agopian    status_t err = buffer->initCheck();
547460160b801b4230f20722efbafcac347312e702Mathias Agopian    if (err != NO_ERROR) {
557460160b801b4230f20722efbafcac347312e702Mathias Agopian        printf("%s\n", strerror(-err));
567460160b801b4230f20722efbafcac347312e702Mathias Agopian        return 0;
577460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
587460160b801b4230f20722efbafcac347312e702Mathias Agopian
597460160b801b4230f20722efbafcac347312e702Mathias Agopian    void* vaddr;
603330b203039dea366d4981db1408a460134b2d2cMathias Agopian    buffer->lock(
617460160b801b4230f20722efbafcac347312e702Mathias Agopian            GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,
627460160b801b4230f20722efbafcac347312e702Mathias Agopian            &vaddr);
637460160b801b4230f20722efbafcac347312e702Mathias Agopian
647460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
657460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("memset");
667460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
677460160b801b4230f20722efbafcac347312e702Mathias Agopian            memset(vaddr, 0, size);
687460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
697460160b801b4230f20722efbafcac347312e702Mathias Agopian
707460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
717460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("memcpy baseline");
727460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
737460160b801b4230f20722efbafcac347312e702Mathias Agopian            memcpy(temp, temp2, size);
747460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
757460160b801b4230f20722efbafcac347312e702Mathias Agopian
767460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
777460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("memcpy from gralloc");
787460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
797460160b801b4230f20722efbafcac347312e702Mathias Agopian            memcpy(temp, vaddr, size);
807460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
817460160b801b4230f20722efbafcac347312e702Mathias Agopian
827460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
837460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("memcpy into gralloc");
847460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
857460160b801b4230f20722efbafcac347312e702Mathias Agopian            memcpy(vaddr, temp, size);
867460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
877460160b801b4230f20722efbafcac347312e702Mathias Agopian
887460160b801b4230f20722efbafcac347312e702Mathias Agopian
897460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
907460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("lamecpy baseline");
917460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
927460160b801b4230f20722efbafcac347312e702Mathias Agopian            lamecpy(temp, temp2, size);
937460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
947460160b801b4230f20722efbafcac347312e702Mathias Agopian
957460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
967460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("lamecpy from gralloc");
977460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
987460160b801b4230f20722efbafcac347312e702Mathias Agopian            lamecpy(temp, vaddr, size);
997460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
1007460160b801b4230f20722efbafcac347312e702Mathias Agopian
1017460160b801b4230f20722efbafcac347312e702Mathias Agopian    {
1027460160b801b4230f20722efbafcac347312e702Mathias Agopian        StopWatch watch("lamecpy into gralloc");
1037460160b801b4230f20722efbafcac347312e702Mathias Agopian        for (int i=0 ; i<10 ; i++)
1047460160b801b4230f20722efbafcac347312e702Mathias Agopian            lamecpy(vaddr, temp, size);
1057460160b801b4230f20722efbafcac347312e702Mathias Agopian    }
1067460160b801b4230f20722efbafcac347312e702Mathias Agopian
1077460160b801b4230f20722efbafcac347312e702Mathias Agopian    buffer->unlock();
1087460160b801b4230f20722efbafcac347312e702Mathias Agopian
1097460160b801b4230f20722efbafcac347312e702Mathias Agopian    return 0;
1107460160b801b4230f20722efbafcac347312e702Mathias Agopian}
111