Try fetching hwservice before waiting for it.

This reduces thrashing in the common case.

This also has the side effect of registering less service
notification listeners with hwservicemanager. This means even
though death notifications aren't being received (b/32837397 #10),
hwservicemanager will no longer be leaking callback interfaces
because after hwservices start, no more will be registered.

Caveat: waitForHwService requires the current process to have
a hwbinder thread available. This can cause problems if:
- a process only has one hwbinder thread
- this process calls getService on that hwbinder thread
- deadlock occurs since another hwbinder thread won't
  be automatically started.
After this change, this deadlock will no longer occur 100% of the
time.

Test: boot internal marlin
Test: hidl_test
Test: repeatedly killing and restarting camera app no longer leaks
      memory in hwservicemanager.
Bug: 62319810

Merged-In: If005575b097313a1014c0cb77fc078df098a24da
Change-Id: If005575b097313a1014c0cb77fc078df098a24da
1 file changed
tree: 25709425731beaa6ff22630c99d4a94de80fb650
  1. c2hal/
  2. include_hash/
  3. test/
  4. utils/
  5. .clang-format
  6. Android.bp
  7. Annotation.cpp
  8. Annotation.h
  9. ArrayType.cpp
  10. ArrayType.h
  11. AST.cpp
  12. AST.h
  13. CompoundType.cpp
  14. CompoundType.h
  15. ConstantExpression.cpp
  16. ConstantExpression.h
  17. Coordinator.cpp
  18. Coordinator.h
  19. DeathRecipientType.cpp
  20. DeathRecipientType.h
  21. EnumType.cpp
  22. EnumType.h
  23. FmqType.cpp
  24. FmqType.h
  25. generateCpp.cpp
  26. generateCppImpl.cpp
  27. generateJava.cpp
  28. generateVts.cpp
  29. HandleType.cpp
  30. HandleType.h
  31. Hash.cpp
  32. hidl-gen_l.ll
  33. hidl-gen_y.yy
  34. HidlTypeAssertion.cpp
  35. HidlTypeAssertion.h
  36. Interface.cpp
  37. Interface.h
  38. Location.h
  39. main.cpp
  40. MemoryType.cpp
  41. MemoryType.h
  42. Method.cpp
  43. Method.h
  44. MODULE_LICENSE_APACHE2
  45. NamedType.cpp
  46. NamedType.h
  47. NOTICE
  48. OWNERS
  49. PointerType.cpp
  50. PointerType.h
  51. PREUPLOAD.cfg
  52. README.md
  53. RefType.cpp
  54. RefType.h
  55. ScalarType.cpp
  56. ScalarType.h
  57. Scope.cpp
  58. Scope.h
  59. StringType.cpp
  60. StringType.h
  61. Type.cpp
  62. Type.h
  63. TypeDef.cpp
  64. TypeDef.h
  65. update-all-google-makefiles.sh
  66. update-makefiles-helper.sh
  67. VectorType.cpp
  68. VectorType.h
README.md

hidl-gen user guide

1. Build

croot
make hidl-gen

2. Run

hidl-gen -o output-path -L language (-r interface-root) fqname

output-path: directory to store the output files.
language: output file for given language. e.g.c++, vts..

fqname: fully qualified name of the input files.
For singe file input, follow the format: package@version::fileName
For directory input, follow the format: package@version

interface-root(optional): prefix and root path for fqname.
If not set, use the default prefix: android.hardware and default root path
defined in $TOP.

examples:

croot
hidl-gen -o output -L c++ -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0::INfc.hal
hidl-gen -o output -L vts -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0
hidl-gen -o test -L c++ -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0