simplify renderscript .so duplicate handling

When renderscript loads a shared library, it first checks to see if the
shared library is already loaded. If the library is already loaded,
renderscript creates a copy of the shared library, loads it, then
immediately deletes that copy. This ensures that renderscript doesn't
end up aliasing global data between the various Script instances (which
are supposed to be completely independent).

This has a few disadvantages:

1) Copying data involves disk I/O and could be slow.
2) Copying data results in unnecessary flash wear.
3) Copying data inhibits page sharing / caching.
4) Copying data makes the code more complicated than necessary.
5) Copying data complicates security hardening.

For framework code, use functionality provided by the
Android dynamic linker to avoid global symbol conflicts. This avoids
the excess copying while still keeping the symbols separate. We retain
the original behavior for the RS support lib (RS_COMPATIBILITY_LIB is
defined), as android_dlopen_ext is only available for devices with API
level 21+.

Testing for global symbol conflict is already present in the
renderscript CTS tests. Please see:

* android.renderscript.cts.ComputeTest#testInstance
https://android.googlesource.com/platform/cts/+/f0916664ac55fce2c2d33de48cef87c0ab179030/tests/tests/renderscript/src/android/renderscript/cts/ComputeTest.java#781

* android.renderscript.cts.ScriptGroupTest#testScriptGroupTorture
https://android.googlesource.com/platform/cts/+/f0916664ac55fce2c2d33de48cef87c0ab179030/tests/tests/renderscript/src/android/renderscript/cts/ScriptGroupTest.java#221

Test: cts-tradefed run cts -m CtsRenderscriptTestCases
Bug: 112357170
Change-Id: I878756e1d9c14840f4371a8275cf2cc6e132ea78
1 file changed
tree: 4eddec836506aa00350dc072bf6e57963b38b492
  1. cpp/
  2. cpu_ref/
  3. driver/
  4. perf-test-scripts/
  5. rsov/
  6. script_api/
  7. support/
  8. tests/
  9. Android.bp
  10. Android.mk
  11. build_rs.py
  12. CleanSpec.mk
  13. libRS.map
  14. OWNERS
  15. rs.h
  16. rs.spec
  17. rs_compat.spec
  18. rs_hal.h
  19. rsAllocation.cpp
  20. rsAllocation.h
  21. rsAnimation.cpp
  22. rsAnimation.h
  23. rsApiAllocation.cpp
  24. rsApiContext.cpp
  25. rsApiDevice.cpp
  26. rsApiElement.cpp
  27. rsApiFileA3D.cpp
  28. rsApiMesh.cpp
  29. rsApiStubs.cpp
  30. rsApiStubs.h
  31. rsApiType.cpp
  32. rsCacheDir.cpp
  33. rsClosure.cpp
  34. rsClosure.h
  35. rsCompatibilityLib.h
  36. rsComponent.cpp
  37. rsComponent.h
  38. rsContext.cpp
  39. rsContext.h
  40. rsCppUtils.cpp
  41. rsCppUtils.h
  42. rsDebugHelper.h
  43. rsDefines.h
  44. rsDevice.cpp
  45. rsDevice.h
  46. rsDriverLoader.cpp
  47. rsElement.cpp
  48. rsElement.h
  49. rsEnv.h
  50. rsFallbackAdaptation.cpp
  51. rsFallbackAdaptation.h
  52. rsFBOCache.cpp
  53. rsFBOCache.h
  54. rsFifo.h
  55. rsFifoSocket.cpp
  56. rsFifoSocket.h
  57. rsFileA3D.cpp
  58. rsFileA3D.h
  59. rsFont.cpp
  60. rsFont.h
  61. rsg.spec
  62. rsg_generator.c
  63. rsgApi.cpp_rsg
  64. rsgApiFuncDecl.h_rsg
  65. rsgApiReplay.cpp_rsg
  66. rsgApiStructs.h_rsg
  67. rsGrallocConsumer.cpp
  68. rsGrallocConsumer.h
  69. rsHidlAdaptation.cpp
  70. rsHidlAdaptation.h
  71. rsInternalDefines.h
  72. rsList.h
  73. rsMap.h
  74. rsMatrix2x2.cpp
  75. rsMatrix2x2.h
  76. rsMatrix3x3.cpp
  77. rsMatrix3x3.h
  78. rsMatrix4x4.cpp
  79. rsMatrix4x4.h
  80. rsMesh.cpp
  81. rsMesh.h
  82. rsMutex.cpp
  83. rsMutex.h
  84. rsObjectBase.cpp
  85. rsObjectBase.h
  86. rsProgram.cpp
  87. rsProgram.h
  88. rsProgramBase.h
  89. rsProgramFragment.cpp
  90. rsProgramFragment.h
  91. rsProgramRaster.cpp
  92. rsProgramRaster.h
  93. rsProgramStore.cpp
  94. rsProgramStore.h
  95. rsProgramVertex.cpp
  96. rsProgramVertex.h
  97. rsRuntime.h
  98. rsSampler.cpp
  99. rsSampler.h
  100. rsScript.cpp
  101. rsScript.h
  102. rsScriptC.cpp
  103. rsScriptC.h
  104. rsScriptC_Lib.cpp
  105. rsScriptC_LibGL.cpp
  106. rsScriptGroup.cpp
  107. rsScriptGroup.h
  108. rsScriptGroup2.cpp
  109. rsScriptGroup2.h
  110. rsScriptGroupBase.h
  111. rsScriptIntrinsic.cpp
  112. rsScriptIntrinsic.h
  113. rsSignal.cpp
  114. rsSignal.h
  115. rsStream.cpp
  116. rsStream.h
  117. rsThreadIO.cpp
  118. rsThreadIO.h
  119. rsType.cpp
  120. rsType.h
  121. rsUtils.h
  122. run_rs_cts.sh
  123. spec.h
  124. spec.l
  125. support.bp
  126. update-prebuilts.py
  127. update_rs_prebuilts.sh