|
- #include "../../IAndroidShm.h"
- #include <binder/MemoryHeapBase.h>
- #include <binder/IServiceManager.h>
-
- namespace android {
-
- static sp<IMemoryHeap> receiverMemBase;
- #define MAX_SHARED_MEMORY_COUNT 257
-
- sp<IAndroidShm> getAndroidShmService() {
- sp<IAndroidShm> shm = 0;
-
- /* Get the buffer service */
- if (shm == NULL) {
- sp<IServiceManager> sm = defaultServiceManager();
- sp<IBinder> binder;
- binder = sm->getService(String16("com.samsung.android.jam.IAndroidShm"));
- if (binder != 0) {
- shm = IAndroidShm::asInterface(binder);
- //shm = interface_cast<IAndroidShm>(binder);
- }
- }
- return shm;
- }
-
- unsigned int * getBufferMemPointer(int index) {
- sp<IAndroidShm> shm = getAndroidShmService();
- if (shm == NULL) {
- ALOGE("The EneaBufferServer is not published");
- return (unsigned int *)-1; /* return an errorcode... */
- } else {
- receiverMemBase = shm->getBuffer(index);
- if(receiverMemBase != NULL)
- return (unsigned int *) receiverMemBase->getBase();
- else
- return (unsigned int*)-1;
- }
- }
-
- }
-
- using namespace android;
-
- void setup_test() {
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
- for(int i = 0; i < MAX_SHARED_MEMORY_COUNT; i++) {
- shm->removeShm(i);
- }
- }
-
- void teardown_test() {
- }
-
- void increase_value_once() {
- ALOGD("*****test: increase_value_once*****\n");
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
-
- int slot = shm->allocShm(10000);
- unsigned int *base = getBufferMemPointer(slot);
- if(base != (unsigned int *)-1) {
- ALOGD("ShmServiceTest base=%p Data=0x%x\n",base, *base);
- *base = (*base)+1;
- ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base, *base);
- //receiverMemBase = 0;
- } else {
- ALOGE("Error shared memory not available\n");
- }
- }
-
- void increase_value_10times() {
- ALOGD("*****test: increase_value_10times*****\n");
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
-
- int slot = shm->allocShm(10000);
-
- for(int i = 0; i < 10; i++) {
- unsigned int *base = getBufferMemPointer(slot);
- if(base != (unsigned int *)-1) {
- ALOGD("ShmServiceTest base=%p Data=0x%x\n",base, *base);
- *base = (*base)+1;
- ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base, *base);
- //receiverMemBase = 0;
- } else {
- ALOGE("Error shared memory not available\n");
- }
- }
- }
-
- void check_allocated() {
- ALOGD("*****test: check_allocated*****\n");
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
-
- int slot = shm->allocShm(10000);
- int i = 0;
- for(; i < MAX_SHARED_MEMORY_COUNT; i++) {
- if(slot == i) {
- if(shm->isAllocated(i) == 1) {
- //ALOGD("pass\n");
- } else {
- ALOGD("failed\n");
- }
- } else {
- if(shm->isAllocated(i) == 0) {
- //ALOGD("pass\n");
- } else {
- ALOGD("failed\n");
- }
- }
- }
-
- if(i == MAX_SHARED_MEMORY_COUNT) {
- ALOGD("pass\n");
- }
- }
-
- void test_set_get_registry_index() {
- ALOGD("*****test: test_set_get_registry_index*****\n");
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
-
- int registry = 1;
- shm->setRegistryIndex(registry);
- if(registry == shm->getRegistryIndex()) {
- ALOGD("pass\n");
- } else {
- ALOGD("fail\n");
- }
-
- registry = 0;
- shm->setRegistryIndex(registry);
- if(registry == shm->getRegistryIndex()) {
- ALOGD("pass\n");
- } else {
- ALOGD("fail\n");
- }
- }
-
- void test_memset() {
- ALOGD("*****test: test_memset*****\n");
- sp<IAndroidShm> shm = getAndroidShmService();
- if(shm == NULL) return;
-
- int slot = shm->allocShm(10000);
-
- unsigned int * pnt = getBufferMemPointer(slot);
-
- memset (pnt, 0, 10000);
-
- ALOGD("result : 0 0 0 0\n");
- ALOGD("memory dump : %d %d %d %d\n", pnt[0], pnt[1], pnt[2], pnt[3]);
-
- memset (pnt, 0xffffffff, 10000);
-
- ALOGD("result : -1 -1 -1 -1\n");
- ALOGD("memory dump : %d %d %d %d", pnt[0], pnt[1], pnt[2], pnt[3]);
- }
-
- int main(int argc, char** argv) {
- // base could be on same address as Servers base but this
- // is purely by luck do NEVER rely on this. Linux memory
- // management may put it wherever it likes.
-
- setup_test();
- increase_value_once();
- teardown_test();
-
- setup_test();
- increase_value_10times();
- teardown_test();
-
- setup_test();
- check_allocated();
- teardown_test();
-
- setup_test();
- test_set_get_registry_index();
- teardown_test();
-
- setup_test();
- test_memset();
- teardown_test();
-
- return 0;
- }
|