jack2 codebase
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
4.7KB

  1. #include "../../IAndroidShm.h"
  2. #include <binder/MemoryHeapBase.h>
  3. #include <binder/IServiceManager.h>
  4. namespace android {
  5. static sp<IMemoryHeap> receiverMemBase;
  6. #define MAX_SHARED_MEMORY_COUNT 257
  7. sp<IAndroidShm> getAndroidShmService() {
  8. sp<IAndroidShm> shm = 0;
  9. /* Get the buffer service */
  10. if (shm == NULL) {
  11. sp<IServiceManager> sm = defaultServiceManager();
  12. sp<IBinder> binder;
  13. binder = sm->getService(String16("com.samsung.android.jam.IAndroidShm"));
  14. if (binder != 0) {
  15. shm = IAndroidShm::asInterface(binder);
  16. //shm = interface_cast<IAndroidShm>(binder);
  17. }
  18. }
  19. return shm;
  20. }
  21. unsigned int * getBufferMemPointer(int index) {
  22. sp<IAndroidShm> shm = getAndroidShmService();
  23. if (shm == NULL) {
  24. ALOGE("The EneaBufferServer is not published");
  25. return (unsigned int *)-1; /* return an errorcode... */
  26. } else {
  27. receiverMemBase = shm->getBuffer(index);
  28. if(receiverMemBase != NULL)
  29. return (unsigned int *) receiverMemBase->getBase();
  30. else
  31. return (unsigned int*)-1;
  32. }
  33. }
  34. }
  35. using namespace android;
  36. void setup_test() {
  37. sp<IAndroidShm> shm = getAndroidShmService();
  38. if(shm == NULL) return;
  39. for(int i = 0; i < MAX_SHARED_MEMORY_COUNT; i++) {
  40. shm->removeShm(i);
  41. }
  42. }
  43. void teardown_test() {
  44. }
  45. void increase_value_once() {
  46. ALOGD("*****test: increase_value_once*****\n");
  47. sp<IAndroidShm> shm = getAndroidShmService();
  48. if(shm == NULL) return;
  49. int slot = shm->allocShm(10000);
  50. unsigned int *base = getBufferMemPointer(slot);
  51. if(base != (unsigned int *)-1) {
  52. ALOGD("ShmServiceTest base=%p Data=0x%x\n",base, *base);
  53. *base = (*base)+1;
  54. ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base, *base);
  55. //receiverMemBase = 0;
  56. } else {
  57. ALOGE("Error shared memory not available\n");
  58. }
  59. }
  60. void increase_value_10times() {
  61. ALOGD("*****test: increase_value_10times*****\n");
  62. sp<IAndroidShm> shm = getAndroidShmService();
  63. if(shm == NULL) return;
  64. int slot = shm->allocShm(10000);
  65. for(int i = 0; i < 10; i++) {
  66. unsigned int *base = getBufferMemPointer(slot);
  67. if(base != (unsigned int *)-1) {
  68. ALOGD("ShmServiceTest base=%p Data=0x%x\n",base, *base);
  69. *base = (*base)+1;
  70. ALOGD("ShmServiceTest base=%p Data=0x%x CHANGED\n",base, *base);
  71. //receiverMemBase = 0;
  72. } else {
  73. ALOGE("Error shared memory not available\n");
  74. }
  75. }
  76. }
  77. void check_allocated() {
  78. ALOGD("*****test: check_allocated*****\n");
  79. sp<IAndroidShm> shm = getAndroidShmService();
  80. if(shm == NULL) return;
  81. int slot = shm->allocShm(10000);
  82. int i = 0;
  83. for(; i < MAX_SHARED_MEMORY_COUNT; i++) {
  84. if(slot == i) {
  85. if(shm->isAllocated(i) == 1) {
  86. //ALOGD("pass\n");
  87. } else {
  88. ALOGD("failed\n");
  89. }
  90. } else {
  91. if(shm->isAllocated(i) == 0) {
  92. //ALOGD("pass\n");
  93. } else {
  94. ALOGD("failed\n");
  95. }
  96. }
  97. }
  98. if(i == MAX_SHARED_MEMORY_COUNT) {
  99. ALOGD("pass\n");
  100. }
  101. }
  102. void test_set_get_registry_index() {
  103. ALOGD("*****test: test_set_get_registry_index*****\n");
  104. sp<IAndroidShm> shm = getAndroidShmService();
  105. if(shm == NULL) return;
  106. int registry = 1;
  107. shm->setRegistryIndex(registry);
  108. if(registry == shm->getRegistryIndex()) {
  109. ALOGD("pass\n");
  110. } else {
  111. ALOGD("fail\n");
  112. }
  113. registry = 0;
  114. shm->setRegistryIndex(registry);
  115. if(registry == shm->getRegistryIndex()) {
  116. ALOGD("pass\n");
  117. } else {
  118. ALOGD("fail\n");
  119. }
  120. }
  121. void test_memset() {
  122. ALOGD("*****test: test_memset*****\n");
  123. sp<IAndroidShm> shm = getAndroidShmService();
  124. if(shm == NULL) return;
  125. int slot = shm->allocShm(10000);
  126. unsigned int * pnt = getBufferMemPointer(slot);
  127. memset (pnt, 0, 10000);
  128. ALOGD("result : 0 0 0 0\n");
  129. ALOGD("memory dump : %d %d %d %d\n", pnt[0], pnt[1], pnt[2], pnt[3]);
  130. memset (pnt, 0xffffffff, 10000);
  131. ALOGD("result : -1 -1 -1 -1\n");
  132. ALOGD("memory dump : %d %d %d %d", pnt[0], pnt[1], pnt[2], pnt[3]);
  133. }
  134. int main(int argc, char** argv) {
  135. // base could be on same address as Servers base but this
  136. // is purely by luck do NEVER rely on this. Linux memory
  137. // management may put it wherever it likes.
  138. setup_test();
  139. increase_value_once();
  140. teardown_test();
  141. setup_test();
  142. increase_value_10times();
  143. teardown_test();
  144. setup_test();
  145. check_allocated();
  146. teardown_test();
  147. setup_test();
  148. test_set_get_registry_index();
  149. teardown_test();
  150. setup_test();
  151. test_memset();
  152. teardown_test();
  153. return 0;
  154. }