1 #include "../../IAndroidShm.h"
2 #include <binder/MemoryHeapBase.h>
3 #include <binder/IServiceManager.h>
7 static sp
<IMemoryHeap
> receiverMemBase
;
8 #define MAX_SHARED_MEMORY_COUNT 257
10 sp
<IAndroidShm
> getAndroidShmService() {
11 sp
<IAndroidShm
> shm
= 0;
13 /* Get the buffer service */
15 sp
<IServiceManager
> sm
= defaultServiceManager();
17 binder
= sm
->getService(String16("com.samsung.android.jam.IAndroidShm"));
19 shm
= IAndroidShm::asInterface(binder
);
20 //shm = interface_cast<IAndroidShm>(binder);
26 unsigned int * getBufferMemPointer(int index
) {
27 sp
<IAndroidShm
> shm
= getAndroidShmService();
29 ALOGE("The EneaBufferServer is not published");
30 return (unsigned int *)-1; /* return an errorcode... */
32 receiverMemBase
= shm
->getBuffer(index
);
33 if(receiverMemBase
!= NULL
)
34 return (unsigned int *) receiverMemBase
->getBase();
36 return (unsigned int*)-1;
42 using namespace android
;
45 sp
<IAndroidShm
> shm
= getAndroidShmService();
46 if(shm
== NULL
) return;
47 for(int i
= 0; i
< MAX_SHARED_MEMORY_COUNT
; i
++) {
52 void teardown_test() {
55 void increase_value_once() {
56 ALOGD("*****test: increase_value_once*****\n");
57 sp
<IAndroidShm
> shm
= getAndroidShmService();
58 if(shm
== NULL
) return;
60 int slot
= shm
->allocShm(10000);
61 unsigned int *base
= getBufferMemPointer(slot
);
62 if(base
!= (unsigned int *)-1) {
63 ALOGD("ShmServiceTest base=%p Data=0x%x\n",base
, *base
);
65 ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base
, *base
);
66 //receiverMemBase = 0;
68 ALOGE("Error shared memory not available\n");
72 void increase_value_10times() {
73 ALOGD("*****test: increase_value_10times*****\n");
74 sp
<IAndroidShm
> shm
= getAndroidShmService();
75 if(shm
== NULL
) return;
77 int slot
= shm
->allocShm(10000);
79 for(int i
= 0; i
< 10; i
++) {
80 unsigned int *base
= getBufferMemPointer(slot
);
81 if(base
!= (unsigned int *)-1) {
82 ALOGD("ShmServiceTest base=%p Data=0x%x\n",base
, *base
);
84 ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base
, *base
);
85 //receiverMemBase = 0;
87 ALOGE("Error shared memory not available\n");
92 void check_allocated() {
93 ALOGD("*****test: check_allocated*****\n");
94 sp
<IAndroidShm
> shm
= getAndroidShmService();
95 if(shm
== NULL
) return;
97 int slot
= shm
->allocShm(10000);
99 for(; i
< MAX_SHARED_MEMORY_COUNT
; i
++) {
101 if(shm
->isAllocated(i
) == 1) {
107 if(shm
->isAllocated(i
) == 0) {
115 if(i
== MAX_SHARED_MEMORY_COUNT
) {
120 void test_set_get_registry_index() {
121 ALOGD("*****test: test_set_get_registry_index*****\n");
122 sp
<IAndroidShm
> shm
= getAndroidShmService();
123 if(shm
== NULL
) return;
126 shm
->setRegistryIndex(registry
);
127 if(registry
== shm
->getRegistryIndex()) {
134 shm
->setRegistryIndex(registry
);
135 if(registry
== shm
->getRegistryIndex()) {
143 ALOGD("*****test: test_memset*****\n");
144 sp
<IAndroidShm
> shm
= getAndroidShmService();
145 if(shm
== NULL
) return;
147 int slot
= shm
->allocShm(10000);
149 unsigned int * pnt
= getBufferMemPointer(slot
);
151 memset (pnt
, 0, 10000);
153 ALOGD("result : 0 0 0 0\n");
154 ALOGD("memory dump : %d %d %d %d\n", pnt
[0], pnt
[1], pnt
[2], pnt
[3]);
156 memset (pnt
, 0xffffffff, 10000);
158 ALOGD("result : -1 -1 -1 -1\n");
159 ALOGD("memory dump : %d %d %d %d", pnt
[0], pnt
[1], pnt
[2], pnt
[3]);
162 int main(int argc
, char** argv
) {
163 // base could be on same address as Servers base but this
164 // is purely by luck do NEVER rely on this. Linux memory
165 // management may put it wherever it likes.
168 increase_value_once();
172 increase_value_10times();
180 test_set_get_registry_index();