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