Lines Matching full:out
55 Formatter &out, in generateCppPackageInclude() argument
59 out << "#include <"; in generateCppPackageInclude()
65 out << component << "/"; in generateCppPackageInclude()
68 out << klass in generateCppPackageInclude()
72 void AST::enterLeaveNamespace(Formatter &out, bool enter) const { in enterLeaveNamespace() argument
78 out << "namespace " << component << " {\n"; in enterLeaveNamespace()
84 out << "} // namespace " << *it << "\n"; in enterLeaveNamespace()
89 static void declareGetService(Formatter &out, const std::string &interfaceName, bool isTry) { in declareGetService() argument
102 .emit(out); in declareGetService()
113 .emit(out); in declareGetService()
115 out << "static ::android::sp<" << interfaceName << "> " << functionName << "(" in declareGetService()
118 .emit(out); in declareGetService()
119 out << "static ::android::sp<" << interfaceName << "> " << functionName << "(" in declareGetService()
124 .emit(out); in declareGetService()
125 out << "static ::android::sp<" << interfaceName << "> " << functionName << "(" in declareGetService()
134 .emit(out); in declareGetService()
135 out << "static ::android::sp<" << interfaceName << "> " << functionName << "(" in declareGetService()
139 static void declareServiceManagerInteractions(Formatter &out, const std::string &interfaceName) { in declareServiceManagerInteractions() argument
140 declareGetService(out, interfaceName, true /* isTry */); in declareServiceManagerInteractions()
141 declareGetService(out, interfaceName, false /* isTry */); in declareServiceManagerInteractions()
147 .emit(out); in declareServiceManagerInteractions()
148 out << "__attribute__ ((warn_unused_result))" in declareServiceManagerInteractions()
151 .emit(out); in declareServiceManagerInteractions()
152 out << "static bool registerForNotifications(\n"; in declareServiceManagerInteractions()
153 out.indent(2, [&] { in declareServiceManagerInteractions()
154 out << "const std::string &serviceName,\n" in declareServiceManagerInteractions()
161 static void implementGetService(Formatter &out, in implementGetService() argument
168 out << "::android::sp<" << interfaceName << "> " << interfaceName << "::" << functionName << "(" in implementGetService()
170 out.block([&] { in implementGetService()
171 out << "return ::android::hardware::details::getServiceInternal<" in implementGetService()
179 static void implementServiceManagerInteractions(Formatter &out, in implementServiceManagerInteractions() argument
184 implementGetService(out, fqName, true /* isTry */); in implementServiceManagerInteractions()
185 implementGetService(out, fqName, false /* isTry */); in implementServiceManagerInteractions()
187 out << "::android::status_t " << interfaceName << "::registerAsService(" in implementServiceManagerInteractions()
189 out.block([&] { in implementServiceManagerInteractions()
190 … out << "return ::android::hardware::details::registerAsServiceInternal(this, serviceName);\n"; in implementServiceManagerInteractions()
193 out << "bool " << interfaceName << "::registerForNotifications(\n"; in implementServiceManagerInteractions()
194 out.indent(2, [&] { in implementServiceManagerInteractions()
195 out << "const std::string &serviceName,\n" in implementServiceManagerInteractions()
199 out.block([&] { in implementServiceManagerInteractions()
200 out << "const ::android::sp<::android::hidl::manager::V1_0::IServiceManager> sm\n"; in implementServiceManagerInteractions()
201 out.indent(2, [&] { in implementServiceManagerInteractions()
202 out << "= ::android::hardware::defaultServiceManager();\n"; in implementServiceManagerInteractions()
204 out.sIf("sm == nullptr", [&] { in implementServiceManagerInteractions()
205 out << "return false;\n"; in implementServiceManagerInteractions()
207 out << "::android::hardware::Return<bool> success =\n"; in implementServiceManagerInteractions()
208 out.indent(2, [&] { in implementServiceManagerInteractions()
209 out << "sm->registerForNotifications(\"" << package << "::" << interfaceName << "\",\n"; in implementServiceManagerInteractions()
210 out.indent(2, [&] { in implementServiceManagerInteractions()
211 out << "serviceName, notification);\n"; in implementServiceManagerInteractions()
214 out << "return success.isOk() && success;\n"; in implementServiceManagerInteractions()
218 void AST::generateInterfaceHeader(Formatter& out) const { in generateInterfaceHeader()
223 out << "#ifndef " << guard << "\n"; in generateInterfaceHeader()
224 out << "#define " << guard << "\n\n"; in generateInterfaceHeader()
227 generateCppPackageInclude(out, item, item.name()); in generateInterfaceHeader()
231 out << "\n"; in generateInterfaceHeader()
236 out << "// skipped #include IServiceNotification.h\n\n"; in generateInterfaceHeader()
238 out << "#include <android/hidl/manager/1.0/IServiceNotification.h>\n\n"; in generateInterfaceHeader()
242 out << "#include <hidl/HidlSupport.h>\n"; in generateInterfaceHeader()
243 out << "#include <hidl/MQDescriptor.h>\n"; in generateInterfaceHeader()
246 out << "#include <hidl/Status.h>\n"; in generateInterfaceHeader()
249 out << "#include <utils/NativeHandle.h>\n"; in generateInterfaceHeader()
250 out << "#include <utils/misc.h>\n\n"; /* for report_sysprop_change() */ in generateInterfaceHeader()
252 enterLeaveNamespace(out, true /* enter */); in generateInterfaceHeader()
253 out << "\n"; in generateInterfaceHeader()
256 iface->emitDocComment(out); in generateInterfaceHeader()
258 out << "struct " in generateInterfaceHeader()
264 out << " : virtual public ::android::RefBase"; in generateInterfaceHeader()
266 out << " : public " in generateInterfaceHeader()
270 out << " {\n"; in generateInterfaceHeader()
272 out.indent(); in generateInterfaceHeader()
276 .emit(out); in generateInterfaceHeader()
277 generateCppTag(out, "::android::hardware::details::i_tag"); in generateInterfaceHeader()
281 .emit(out); in generateInterfaceHeader()
282 out << "static const char* descriptor;\n\n"; in generateInterfaceHeader()
284 iface->emitTypeDeclarations(out); in generateInterfaceHeader()
286 mRootScope.emitTypeDeclarations(out); in generateInterfaceHeader()
293 .emit(out); in generateInterfaceHeader()
294 out << "virtual bool isRemote() const "; in generateInterfaceHeader()
296 out << "override "; in generateInterfaceHeader()
298 out << "{ return false; }\n"; in generateInterfaceHeader()
304 out << "\n"; in generateInterfaceHeader()
310 DocComment("Return callback for " + method->name(), HIDL_LOCATION_HERE).emit(out); in generateInterfaceHeader()
311 out << "using " in generateInterfaceHeader()
314 method->emitCppResultSignature(out, true /* specify namespaces */); in generateInterfaceHeader()
315 out << ")>;\n"; in generateInterfaceHeader()
318 method->emitDocComment(out); in generateInterfaceHeader()
321 out << "virtual ::android::hardware::Return<"; in generateInterfaceHeader()
322 out << elidedReturn->type().getCppResultType() << "> "; in generateInterfaceHeader()
324 out << "virtual ::android::hardware::Return<void> "; in generateInterfaceHeader()
327 out << method->name() in generateInterfaceHeader()
329 method->emitCppArgSignature(out, true /* specify namespaces */); in generateInterfaceHeader()
330 out << ")"; in generateInterfaceHeader()
333 out << " override"; in generateInterfaceHeader()
337 out << " override"; in generateInterfaceHeader()
339 out << " = 0"; in generateInterfaceHeader()
341 out << ";\n"; in generateInterfaceHeader()
344 out << "\n// cast static functions\n"; in generateInterfaceHeader()
352 .emit(out); in generateInterfaceHeader()
353 out << "static ::android::hardware::Return<" in generateInterfaceHeader()
362 out << "\n// skipped getService, registerAsService, registerForNotifications\n\n"; in generateInterfaceHeader()
364 out << "\n// helper methods for interactions with the hwservicemanager\n"; in generateInterfaceHeader()
365 declareServiceManagerInteractions(out, iface->definedName()); in generateInterfaceHeader()
370 out.unindent(); in generateInterfaceHeader()
372 out << "};\n\n"; in generateInterfaceHeader()
375 out << "//\n"; in generateInterfaceHeader()
376 out << "// type declarations for package\n"; in generateInterfaceHeader()
377 out << "//\n\n"; in generateInterfaceHeader()
378 mRootScope.emitPackageTypeDeclarations(out); in generateInterfaceHeader()
379 out << "//\n"; in generateInterfaceHeader()
380 out << "// type header definitions for package\n"; in generateInterfaceHeader()
381 out << "//\n\n"; in generateInterfaceHeader()
382 mRootScope.emitPackageTypeHeaderDefinitions(out); in generateInterfaceHeader()
384 out << "\n"; in generateInterfaceHeader()
385 enterLeaveNamespace(out, false /* enter */); in generateInterfaceHeader()
386 out << "\n"; in generateInterfaceHeader()
388 out << "//\n"; in generateInterfaceHeader()
389 out << "// global type declarations for package\n"; in generateInterfaceHeader()
390 out << "//\n\n"; in generateInterfaceHeader()
391 mRootScope.emitGlobalTypeDeclarations(out); in generateInterfaceHeader()
393 out << "\n#endif // " << guard << "\n"; in generateInterfaceHeader()
396 void AST::generateHwBinderHeader(Formatter& out) const { in generateHwBinderHeader()
402 out << "#ifndef " << guard << "\n"; in generateHwBinderHeader()
403 out << "#define " << guard << "\n\n"; in generateHwBinderHeader()
405 generateCppPackageInclude(out, mPackage, iface ? iface->definedName() : "types"); in generateHwBinderHeader()
407 out << "\n"; in generateHwBinderHeader()
411 generateCppPackageInclude(out, item, "hwtypes"); in generateHwBinderHeader()
413 generateCppPackageInclude(out, item, item.getInterfaceStubName()); in generateHwBinderHeader()
414 generateCppPackageInclude(out, item, item.getInterfaceProxyName()); in generateHwBinderHeader()
418 out << "\n"; in generateHwBinderHeader()
420 out << "#include <hidl/Status.h>\n"; in generateHwBinderHeader()
421 out << "#include <hwbinder/IBinder.h>\n"; in generateHwBinderHeader()
422 out << "#include <hwbinder/Parcel.h>\n"; in generateHwBinderHeader()
424 out << "\n"; in generateHwBinderHeader()
426 enterLeaveNamespace(out, true /* enter */); in generateHwBinderHeader()
428 mRootScope.emitPackageHwDeclarations(out); in generateHwBinderHeader()
430 enterLeaveNamespace(out, false /* enter */); in generateHwBinderHeader()
432 out << "\n#endif // " << guard << "\n"; in generateHwBinderHeader()
435 static std::string wrapPassthroughArg(Formatter& out, const NamedReference<Type>* arg, in wrapPassthroughArg() argument
442 out << iface.getCppStackType() << " " << wrappedName << ";\n"; in wrapPassthroughArg()
444 out.sIf(name + " != nullptr && !" + name + "->isRemote()", [&] { in wrapPassthroughArg()
445 out << wrappedName in wrapPassthroughArg()
450 out.sIf(wrappedName + " == nullptr", [&] { in wrapPassthroughArg()
456 out << wrappedName << " = " << name << ";\n"; in wrapPassthroughArg()
462 void AST::generatePassthroughMethod(Formatter& out, const Method* method, const Interface* superInt… in generatePassthroughMethod() argument
463 method->generateCppSignature(out); in generatePassthroughMethod()
465 out << " override {\n"; in generatePassthroughMethod()
466 out.indent(); in generatePassthroughMethod()
470 method->cppImpl(IMPL_PASSTHROUGH, out); in generatePassthroughMethod()
471 out.unindent(); in generatePassthroughMethod()
472 out << "}\n\n"; in generatePassthroughMethod()
480 out, in generatePassthroughMethod()
487 std::string name = wrapPassthroughArg(out, arg, arg->name(), [&] { in generatePassthroughMethod()
488 out << "return ::android::hardware::Status::fromExceptionCode(\n"; in generatePassthroughMethod()
489 out.indent(2, [&] { in generatePassthroughMethod()
490 out << "::android::hardware::Status::EX_TRANSACTION_FAILED,\n" in generatePassthroughMethod()
498 out << "::android::hardware::Status _hidl_error = ::android::hardware::Status::ok();\n"; in generatePassthroughMethod()
499 out << "auto _hidl_return = "; in generatePassthroughMethod()
502 out << "addOnewayTask([mImpl = this->mImpl\n" in generatePassthroughMethod()
508 out << ", " << arg; in generatePassthroughMethod()
510 out << "] {\n"; in generatePassthroughMethod()
511 out.indent(); in generatePassthroughMethod()
514 out << "mImpl->" in generatePassthroughMethod()
518 out.join(method->args().begin(), method->args().end(), ", ", [&](const auto &arg) { in generatePassthroughMethod()
519 out << (arg->type().isInterface() ? "_hidl_wrapped_" : "") << arg->name(); in generatePassthroughMethod()
523 out << "_hidl_error = ::android::hardware::Status::fromExceptionCode(\n"; in generatePassthroughMethod()
524 out.indent(2, [&] { in generatePassthroughMethod()
525 out << "::android::hardware::Status::EX_TRANSACTION_FAILED,\n" in generatePassthroughMethod()
534 out << ", "; in generatePassthroughMethod()
536 out << "[&]("; in generatePassthroughMethod()
537 out.join(method->results().begin(), method->results().end(), ", ", [&](const auto &arg) { in generatePassthroughMethod()
538 out << "const auto &_hidl_out_" in generatePassthroughMethod()
542 out << ") {\n"; in generatePassthroughMethod()
543 out.indent(); in generatePassthroughMethod()
545 out, in generatePassthroughMethod()
553 wrapPassthroughArg(out, arg, "_hidl_out_" + arg->name(), kHandlePassthroughError)); in generatePassthroughMethod()
556 out << "_hidl_cb("; in generatePassthroughMethod()
557 out.join(wrappedOutNames.begin(), wrappedOutNames.end(), ", ", in generatePassthroughMethod()
558 [&](const std::string& arg) { out << arg; }); in generatePassthroughMethod()
559 out << ");\n"; in generatePassthroughMethod()
560 out.unindent(); in generatePassthroughMethod()
561 out << "});\n\n"; in generatePassthroughMethod()
563 out << ");\n\n"; in generatePassthroughMethod()
568 out << elidedReturn->type().getCppResultType() << " " << outName in generatePassthroughMethod()
570 out << "(void) " << outName << ";\n"; in generatePassthroughMethod()
573 wrapPassthroughArg(out, elidedReturn, outName, kHandlePassthroughError); in generatePassthroughMethod()
577 out << outName << " = " << wrappedName << ";\n\n"; in generatePassthroughMethod()
580 out << "_hidl_return = " << outName << "\n;"; in generatePassthroughMethod()
584 out, in generatePassthroughMethod()
591 out.unindent(); in generatePassthroughMethod()
592 out << "});\n"; in generatePassthroughMethod()
594 out << "if (!_hidl_error.isOk()) return _hidl_error;\n"; in generatePassthroughMethod()
597 out << "return _hidl_return;\n"; in generatePassthroughMethod()
599 out.unindent(); in generatePassthroughMethod()
600 out << "}\n"; in generatePassthroughMethod()
603 void AST::generateMethods(Formatter& out, const MethodGenerator& gen, bool includeParent) const { in generateMethods() argument
617 out << "\n"; in generateMethods()
619 out << "// Methods from " in generateMethods()
627 out << "\n"; in generateMethods()
630 void AST::generateTemplatizationLink(Formatter& out) const { in generateTemplatizationLink()
631 DocComment("The pure class is what this class wraps.", HIDL_LOCATION_HERE).emit(out); in generateTemplatizationLink()
632 out << "typedef " << mRootScope.getInterface()->definedName() << " Pure;\n\n"; in generateTemplatizationLink()
635 void AST::generateCppTag(Formatter& out, const std::string& tag) const { in generateCppTag() argument
636 out << "typedef " << tag << " _hidl_tag;\n\n"; in generateCppTag()
639 void AST::generateStubHeader(Formatter& out) const { in generateStubHeader()
646 out << "#ifndef " << guard << "\n"; in generateStubHeader()
647 out << "#define " << guard << "\n\n"; in generateStubHeader()
649 generateCppPackageInclude(out, mPackage, iface->getHwName()); in generateStubHeader()
651 out << "\n"; in generateStubHeader()
653 enterLeaveNamespace(out, true /* enter */); in generateStubHeader()
654 out << "\n"; in generateStubHeader()
656 out << "struct " in generateStubHeader()
659 out << " : public ::android::hardware::BHwBinder"; in generateStubHeader()
660 out << ", public ::android::hardware::details::HidlInstrumentor {\n"; in generateStubHeader()
662 out << " : public " in generateStubHeader()
667 out.indent(); in generateStubHeader()
668 out << "explicit " << klassName << "(const ::android::sp<" << iface->definedName() in generateStubHeader()
671 out << "explicit " << klassName << "(const ::android::sp<" << iface->definedName() in generateStubHeader()
676 out << "virtual ~" << klassName << "();\n\n"; in generateStubHeader()
677 out << "::android::status_t onTransact(\n"; in generateStubHeader()
678 out.indent(); in generateStubHeader()
679 out.indent(); in generateStubHeader()
680 out << "uint32_t _hidl_code,\n"; in generateStubHeader()
681 out << "const ::android::hardware::Parcel &_hidl_data,\n"; in generateStubHeader()
682 out << "::android::hardware::Parcel *_hidl_reply,\n"; in generateStubHeader()
683 out << "uint32_t _hidl_flags = 0,\n"; in generateStubHeader()
684 out << "TransactCallback _hidl_cb = nullptr) override;\n\n"; in generateStubHeader()
685 out.unindent(); in generateStubHeader()
686 out.unindent(); in generateStubHeader()
688 out.endl(); in generateStubHeader()
689 generateTemplatizationLink(out); in generateStubHeader()
692 .emit(out); in generateStubHeader()
693 generateCppTag(out, "::android::hardware::details::bnhw_tag"); in generateStubHeader()
695 out << "::android::sp<" << iface->definedName() << "> getImpl() { return _hidl_mImpl; }\n"; in generateStubHeader()
703 out << "bool checkSubclass(const void* subclassID) const override;\n"; in generateStubHeader()
706 generateMethods(out, in generateStubHeader()
712 out << "static ::android::status_t _hidl_" << method->name() << "(\n"; in generateStubHeader()
714 out.indent(2, in generateStubHeader()
716 out << "::android::hidl::base::V1_0::BnHwBase* _hidl_this,\n" in generateStubHeader()
726 out.unindent(); in generateStubHeader()
727 out << "private:\n"; in generateStubHeader()
728 out.indent(); in generateStubHeader()
730 generateMethods(out, [&](const Method* method, const Interface* iface) { in generateStubHeader()
738 out << "using " << method->name() << "_cb = " in generateStubHeader()
742 method->generateCppSignature(out); in generateStubHeader()
743 out << ";\n"; in generateStubHeader()
746 out << "::android::sp<" << iface->definedName() << "> _hidl_mImpl;\n"; in generateStubHeader()
747 out.unindent(); in generateStubHeader()
748 out << "};\n\n"; in generateStubHeader()
750 enterLeaveNamespace(out, false /* enter */); in generateStubHeader()
752 out << "\n#endif // " << guard << "\n"; in generateStubHeader()
755 void AST::generateProxyHeader(Formatter& out) const { in generateProxyHeader()
765 out << "#ifndef " << guard << "\n"; in generateProxyHeader()
766 out << "#define " << guard << "\n\n"; in generateProxyHeader()
768 out << "#include <hidl/HidlTransportSupport.h>\n\n"; in generateProxyHeader()
770 generateCppPackageInclude(out, mPackage, iface->getHwName()); in generateProxyHeader()
771 out << "\n"; in generateProxyHeader()
772 out << "#include <mutex>\n"; in generateProxyHeader()
774 enterLeaveNamespace(out, true /* enter */); in generateProxyHeader()
775 out << "\n"; in generateProxyHeader()
777 out << "struct " << proxyName << " : public ::android::hardware::BpInterface<" in generateProxyHeader()
780 out.indent(); in generateProxyHeader()
782 out << "explicit " in generateProxyHeader()
787 generateTemplatizationLink(out); in generateProxyHeader()
790 .emit(out); in generateProxyHeader()
791 generateCppTag(out, "::android::hardware::details::bphw_tag"); in generateProxyHeader()
793 out << "virtual bool isRemote() const override { return true; }\n\n"; in generateProxyHeader()
795 out << "void onLastStrongRef(const void* id) override;\n\n"; in generateProxyHeader()
798 out, in generateProxyHeader()
804 out << "static "; in generateProxyHeader()
805 method->generateCppReturnType(out); in generateProxyHeader()
806 out << " _hidl_" << method->name() << "(" in generateProxyHeader()
811 out << ", "; in generateProxyHeader()
813 method->emitCppArgSignature(out); in generateProxyHeader()
814 out << ");\n"; in generateProxyHeader()
818 generateMethods(out, [&](const Method* method, const Interface*) { in generateProxyHeader()
819 method->generateCppSignature(out); in generateProxyHeader()
820 out << " override;\n"; in generateProxyHeader()
823 out.unindent(); in generateProxyHeader()
824 out << "private:\n"; in generateProxyHeader()
825 out.indent(); in generateProxyHeader()
826 out << "std::mutex _hidl_mMutex;\n" in generateProxyHeader()
829 out.unindent(); in generateProxyHeader()
830 out << "};\n\n"; in generateProxyHeader()
832 enterLeaveNamespace(out, false /* enter */); in generateProxyHeader()
834 out << "\n#endif // " << guard << "\n"; in generateProxyHeader()
837 void AST::generateCppSource(Formatter& out) const { in generateCppSource()
843 out << "#define LOG_TAG \"" in generateCppSource()
847 out << "#include <log/log.h>\n"; in generateCppSource()
848 out << "#include <cutils/trace.h>\n"; in generateCppSource()
849 out << "#include <hidl/HidlTransportSupport.h>\n\n"; in generateCppSource()
850 out << "#include <hidl/Static.h>\n"; in generateCppSource()
851 out << "#include <hwbinder/ProcessState.h>\n"; in generateCppSource()
852 out << "#include <utils/Trace.h>\n"; in generateCppSource()
855 out << "#include <android/hidl/manager/1.0/IServiceManager.h>\n"; in generateCppSource()
857 generateCppPackageInclude(out, mPackage, iface->getProxyName()); in generateCppSource()
858 generateCppPackageInclude(out, mPackage, iface->getStubName()); in generateCppSource()
859 generateCppPackageInclude(out, mPackage, iface->getPassthroughName()); in generateCppSource()
862 generateCppPackageInclude(out, in generateCppSource()
867 out << "#include <hidl/ServiceManagement.h>\n"; in generateCppSource()
869 generateCppPackageInclude(out, mPackage, "types"); in generateCppSource()
870 generateCppPackageInclude(out, mPackage, "hwtypes"); in generateCppSource()
873 out << "\n"; in generateCppSource()
875 enterLeaveNamespace(out, true /* enter */); in generateCppSource()
876 out << "\n"; in generateCppSource()
878 generateTypeSource(out, iface ? iface->definedName() : ""); in generateCppSource()
884 out << "const char* " << iface->definedName() << "::descriptor(\"" in generateCppSource()
886 out << "__attribute__((constructor)) "; in generateCppSource()
887 out << "static void static_constructor() {\n"; in generateCppSource()
888 out.indent([&] { in generateCppSource()
889 out << "::android::hardware::details::getBnConstructorMap().set(" in generateCppSource()
891 out.indent(2, [&] { in generateCppSource()
892 out << "[](void *iIntf) -> ::android::sp<::android::hardware::IBinder> {\n"; in generateCppSource()
893 out.indent([&] { in generateCppSource()
894 out << "return new " << iface->getStubName() << "(static_cast<" in generateCppSource()
897 out << "});\n"; in generateCppSource()
899 out << "::android::hardware::details::getBsConstructorMap().set(" in generateCppSource()
901 out.indent(2, [&] { in generateCppSource()
902 out << "[](void *iIntf) -> ::android::sp<" in generateCppSource()
905 out.indent([&] { in generateCppSource()
906 out << "return new " << iface->getPassthroughName() << "(static_cast<" in generateCppSource()
909 out << "});\n"; in generateCppSource()
912 out << "}\n\n"; in generateCppSource()
913 out << "__attribute__((destructor))"; in generateCppSource()
914 out << "static void static_destructor() {\n"; in generateCppSource()
915 out.indent([&] { in generateCppSource()
916 out << "::android::hardware::details::getBnConstructorMap().erase(" in generateCppSource()
918 out << "::android::hardware::details::getBsConstructorMap().erase(" in generateCppSource()
921 out << "}\n\n"; in generateCppSource()
923 generateInterfaceSource(out); in generateCppSource()
924 generateProxySource(out, iface->fqName()); in generateCppSource()
925 generateStubSource(out, iface); in generateCppSource()
926 generatePassthroughSource(out); in generateCppSource()
929 out << "// skipped getService, registerAsService, registerForNotifications\n"; in generateCppSource()
934 implementServiceManagerInteractions(out, iface->fqName(), package); in generateCppSource()
938 HidlTypeAssertion::EmitAll(out); in generateCppSource()
939 out << "\n"; in generateCppSource()
941 enterLeaveNamespace(out, false /* enter */); in generateCppSource()
944 void AST::generateTypeSource(Formatter& out, const std::string& ifaceName) const { in generateTypeSource() argument
945 mRootScope.emitTypeDefinitions(out, ifaceName); in generateTypeSource()
948 void AST::declareCppReaderLocals(Formatter& out, const std::vector<NamedReference<Type>*>& args, in declareCppReaderLocals() argument
957 out << type.getCppResultType() in declareCppReaderLocals()
963 out << "\n"; in declareCppReaderLocals()
966 void AST::emitCppReaderWriter(Formatter& out, const std::string& parcelObj, bool parcelObjIsPointer, in emitCppReaderWriter() argument
972 out, in emitCppReaderWriter()
980 void AST::generateProxyMethodSource(Formatter& out, const std::string& klassName, in generateProxyMethodSource() argument
982 method->generateCppSignature(out, in generateProxyMethodSource()
987 out.block([&] { in generateProxyMethodSource()
988 method->cppImpl(IMPL_PROXY, out); in generateProxyMethodSource()
993 out.block([&] { in generateProxyMethodSource()
997 method->generateCppReturnType(out); in generateProxyMethodSource()
999 out << " _hidl_out = " in generateProxyMethodSource()
1008 out << ", "; in generateProxyMethodSource()
1011 out.join(method->args().begin(), method->args().end(), ", ", [&](const auto &arg) { in generateProxyMethodSource()
1012 out << arg->name(); in generateProxyMethodSource()
1017 out << ", "; in generateProxyMethodSource()
1019 out << "_hidl_cb"; in generateProxyMethodSource()
1022 out << ");\n\n"; in generateProxyMethodSource()
1024 out << "return _hidl_out;\n"; in generateProxyMethodSource()
1028 void AST::generateStaticProxyMethodSource(Formatter& out, const std::string& klassName, in generateStaticProxyMethodSource() argument
1034 method->generateCppReturnType(out); in generateStaticProxyMethodSource()
1036 out << klassName in generateStaticProxyMethodSource()
1044 out << ", "; in generateStaticProxyMethodSource()
1047 method->emitCppArgSignature(out); in generateStaticProxyMethodSource()
1048 out << ") {\n"; in generateStaticProxyMethodSource()
1050 out.indent(); in generateStaticProxyMethodSource()
1052 out << "#ifdef __ANDROID_DEBUGGABLE__\n"; in generateStaticProxyMethodSource()
1053 out << "bool mEnableInstrumentation = _hidl_this_instrumentor->isInstrumentationEnabled();\n"; in generateStaticProxyMethodSource()
1054 …out << "const auto &mInstrumentationCallbacks = _hidl_this_instrumentor->getInstrumentationCallbac… in generateStaticProxyMethodSource()
1055 out << "#else\n"; in generateStaticProxyMethodSource()
1056 out << "(void) _hidl_this_instrumentor;\n"; in generateStaticProxyMethodSource()
1057 out << "#endif // __ANDROID_DEBUGGABLE__\n"; in generateStaticProxyMethodSource()
1064 out, in generateStaticProxyMethodSource()
1069 out << "::android::hardware::Parcel _hidl_data;\n"; in generateStaticProxyMethodSource()
1070 out << "::android::hardware::Parcel _hidl_reply;\n"; in generateStaticProxyMethodSource()
1071 out << "::android::status_t _hidl_err;\n"; in generateStaticProxyMethodSource()
1072 out << "::android::status_t _hidl_transact_err;\n"; in generateStaticProxyMethodSource()
1073 out << "::android::hardware::Status _hidl_status;\n\n"; in generateStaticProxyMethodSource()
1077 out, method->results(), true /* forResults */); in generateStaticProxyMethodSource()
1080 out << "_hidl_data.markSensitive();\n"; in generateStaticProxyMethodSource()
1083 out << "_hidl_err = _hidl_data.writeInterfaceToken("; in generateStaticProxyMethodSource()
1084 out << klassName; in generateStaticProxyMethodSource()
1085 out << "::descriptor);\n"; in generateStaticProxyMethodSource()
1086 out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; in generateStaticProxyMethodSource()
1095 out, in generateStaticProxyMethodSource()
1106 out << "::android::hardware::ProcessState::self()->startThreadPool();\n"; in generateStaticProxyMethodSource()
1108 out << "_hidl_transact_err = ::android::hardware::IInterface::asBinder(_hidl_this)->transact(" in generateStaticProxyMethodSource()
1113 out << " | " << Interface::FLAG_ONE_WAY->cppValue(); in generateStaticProxyMethodSource()
1116 out << " | " << Interface::FLAG_CLEAR_BUF->cppValue(); in generateStaticProxyMethodSource()
1120 out << ", [&] (::android::hardware::Parcel& _hidl_reply) {\n"; in generateStaticProxyMethodSource()
1121 out.indent(); in generateStaticProxyMethodSource()
1123 out, method->results(), true /* forResults */); in generateStaticProxyMethodSource()
1124 out.endl(); in generateStaticProxyMethodSource()
1126 out << ");\n"; in generateStaticProxyMethodSource()
1127 out << "if (_hidl_transact_err != ::android::OK) \n"; in generateStaticProxyMethodSource()
1128 out.block([&] { in generateStaticProxyMethodSource()
1129 out << "_hidl_err = _hidl_transact_err;\n"; in generateStaticProxyMethodSource()
1130 out << "goto _hidl_error;\n"; in generateStaticProxyMethodSource()
1137 out << "_hidl_err = ::android::hardware::readFromParcel(&_hidl_status, _hidl_reply);\n"; in generateStaticProxyMethodSource()
1138 Type::handleError(out, errorMode); in generateStaticProxyMethodSource()
1141 out << "if (!_hidl_status.isOk()) { return; }\n\n"; in generateStaticProxyMethodSource()
1143 out << "if (!_hidl_status.isOk()) { return _hidl_status; }\n\n"; in generateStaticProxyMethodSource()
1148 out, in generateStaticProxyMethodSource()
1158 out << "_hidl_cb("; in generateStaticProxyMethodSource()
1160 … out.join(method->results().begin(), method->results().end(), ", ", [&] (const auto &arg) { in generateStaticProxyMethodSource()
1162 out << "*"; in generateStaticProxyMethodSource()
1164 out << "_hidl_out_" << arg->name(); in generateStaticProxyMethodSource()
1167 out << ");\n\n"; in generateStaticProxyMethodSource()
1172 out, in generateStaticProxyMethodSource()
1178 out.unindent(); in generateStaticProxyMethodSource()
1179 out << "});\n"; in generateStaticProxyMethodSource()
1180 out << "if (_hidl_transact_err != ::android::OK) "; in generateStaticProxyMethodSource()
1181 out.block([&] { in generateStaticProxyMethodSource()
1182 out << "_hidl_err = _hidl_transact_err;\n"; in generateStaticProxyMethodSource()
1183 out << "goto _hidl_error;\n"; in generateStaticProxyMethodSource()
1185 out << "if (!_hidl_status.isOk()) { return _hidl_status; }\n"; in generateStaticProxyMethodSource()
1189 out << "return ::android::hardware::Return<"; in generateStaticProxyMethodSource()
1190 out << elidedReturn->type().getCppResultType() in generateStaticProxyMethodSource()
1193 out << "return ::android::hardware::Return<void>();\n\n"; in generateStaticProxyMethodSource()
1196 out.unindent(); in generateStaticProxyMethodSource()
1197 out << "_hidl_error:\n"; in generateStaticProxyMethodSource()
1198 out.indent(); in generateStaticProxyMethodSource()
1199 out << "_hidl_status.setFromStatusT(_hidl_err);\n"; in generateStaticProxyMethodSource()
1200 out << "return ::android::hardware::Return<"; in generateStaticProxyMethodSource()
1202 out << method->results().at(0)->type().getCppResultType(); in generateStaticProxyMethodSource()
1204 out << "void"; in generateStaticProxyMethodSource()
1206 out << ">(_hidl_status);\n"; in generateStaticProxyMethodSource()
1208 out.unindent(); in generateStaticProxyMethodSource()
1209 out << "}\n\n"; in generateStaticProxyMethodSource()
1212 void AST::generateProxySource(Formatter& out, const FQName& fqName) const { in generateProxySource() argument
1215 out << klassName in generateProxySource()
1220 out.indent(); in generateProxySource()
1221 out.indent(); in generateProxySource()
1223 out << ": BpInterface" in generateProxySource()
1233 out.unindent(); in generateProxySource()
1234 out.unindent(); in generateProxySource()
1235 out << "}\n\n"; in generateProxySource()
1237 out << "void " << klassName << "::onLastStrongRef(const void* id) "; in generateProxySource()
1238 out.block([&] { in generateProxySource()
1239 out.block([&] { in generateProxySource()
1242 out << "std::unique_lock<std::mutex> lock(_hidl_mMutex);\n"; in generateProxySource()
1243 out << "_hidl_mDeathRecipients.clear();\n"; in generateProxySource()
1246 out << "BpInterface<" << fqName.getInterfaceName() << ">::onLastStrongRef(id);\n"; in generateProxySource()
1249 generateMethods(out, in generateProxySource()
1251 generateStaticProxyMethodSource(out, klassName, method, superInterface); in generateProxySource()
1255 generateMethods(out, [&](const Method* method, const Interface* superInterface) { in generateProxySource()
1256 generateProxyMethodSource(out, klassName, method, superInterface); in generateProxySource()
1260 void AST::generateStubSource(Formatter& out, const Interface* iface) const { in generateStubSource() argument
1264 out << klassName in generateStubSource()
1269 out.indent(); in generateStubSource()
1270 out.indent(); in generateStubSource()
1273 out << ": ::android::hardware::details::HidlInstrumentor(\""; in generateStubSource()
1275 out << ": " in generateStubSource()
1280 out << mPackage.string() in generateStubSource()
1284 out.indent(); in generateStubSource()
1285 out << "_hidl_mImpl = _hidl_impl;\n"; in generateStubSource()
1286 out << "auto prio = ::android::hardware::getMinSchedulerPolicy(_hidl_impl);\n"; in generateStubSource()
1287 out << "mSchedPolicy = prio.sched_policy;\n"; in generateStubSource()
1288 out << "mSchedPriority = prio.prio;\n"; in generateStubSource()
1289 out << "setRequestingSid(::android::hardware::getRequestingSid(_hidl_impl));\n"; in generateStubSource()
1290 out.unindent(); in generateStubSource()
1292 out.unindent(); in generateStubSource()
1293 out.unindent(); in generateStubSource()
1294 out << "}\n\n"; in generateStubSource()
1299 out << klassName in generateStubSource()
1306 out.indent(); in generateStubSource()
1307 out.indent(); in generateStubSource()
1309 out << ": ::android::hardware::details::HidlInstrumentor(" in generateStubSource()
1311 out.indent(); in generateStubSource()
1312 out << "_hidl_mImpl = _hidl_impl;\n"; in generateStubSource()
1313 out.unindent(); in generateStubSource()
1315 out.unindent(); in generateStubSource()
1316 out.unindent(); in generateStubSource()
1317 out << "}\n\n"; in generateStubSource()
1320 out << klassName << "::~" << klassName << "() "; in generateStubSource()
1321 out.block([&]() { in generateStubSource()
1322 out << "::android::hardware::details::gBnMap->eraseIfEqual(_hidl_mImpl.get(), this);\n"; in generateStubSource()
1328 out << "bool " << klassName << "::checkSubclass(const void* subclassID) const "; in generateStubSource()
1329 out.block([&] { out << "return subclassID == " << interfaceName << "::descriptor;\n"; }); in generateStubSource()
1332 generateMethods(out, in generateStubSource()
1334 … return generateStaticStubMethodSource(out, iface->fqName(), method, superInterface); in generateStubSource()
1338 generateMethods(out, [&](const Method* method, const Interface*) { in generateStubSource()
1342 method->generateCppSignature(out, iface->getStubName()); in generateStubSource()
1343 out << " "; in generateStubSource()
1344 out.block([&] { in generateStubSource()
1345 method->cppImpl(IMPL_STUB_IMPL, out); in generateStubSource()
1349 out << "::android::status_t " << klassName << "::onTransact(\n"; in generateStubSource()
1351 out.indent(); in generateStubSource()
1352 out.indent(); in generateStubSource()
1354 out << "uint32_t _hidl_code,\n" in generateStubSource()
1360 out.unindent(); in generateStubSource()
1362 out << "::android::status_t _hidl_err = ::android::OK;\n\n"; in generateStubSource()
1363 out << "switch (_hidl_code) {\n"; in generateStubSource()
1364 out.indent(); in generateStubSource()
1373 out << "case " in generateStubSource()
1379 out.indent(); in generateStubSource()
1381 generateStubSourceForMethod(out, method, superInterface); in generateStubSource()
1383 out.unindent(); in generateStubSource()
1384 out << "}\n\n"; in generateStubSource()
1387 out << "default:\n{\n"; in generateStubSource()
1388 out.indent(); in generateStubSource()
1391 out << "(void)_hidl_flags;\n"; in generateStubSource()
1392 out << "return ::android::UNKNOWN_TRANSACTION;\n"; in generateStubSource()
1394 out << "return "; in generateStubSource()
1395 out << gIBaseFqName.getInterfaceStubFqName().cppName(); in generateStubSource()
1396 out << "::onTransact(\n"; in generateStubSource()
1398 out.indent(); in generateStubSource()
1399 out.indent(); in generateStubSource()
1401 out << "_hidl_code, _hidl_data, _hidl_reply, " in generateStubSource()
1404 out.unindent(); in generateStubSource()
1405 out.unindent(); in generateStubSource()
1408 out.unindent(); in generateStubSource()
1409 out << "}\n"; in generateStubSource()
1411 out.unindent(); in generateStubSource()
1412 out << "}\n\n"; in generateStubSource()
1414 out.sIf("_hidl_err == ::android::UNEXPECTED_NULL", [&] { in generateStubSource()
1415 out << "_hidl_err = ::android::hardware::writeToParcel(\n"; in generateStubSource()
1416 out.indent(2, [&] { in generateStubSource()
1417 …out << "::android::hardware::Status::fromExceptionCode(::android::hardware::Status::EX_NULL_POINTE… in generateStubSource()
1418 out << "_hidl_reply);\n"; in generateStubSource()
1422 out << "return _hidl_err;\n"; in generateStubSource()
1424 out.unindent(); in generateStubSource()
1425 out << "}\n\n"; in generateStubSource()
1428 void AST::generateStubSourceForMethod(Formatter& out, const Method* method, in generateStubSourceForMethod() argument
1431 method->cppImpl(IMPL_STUB, out); in generateStubSourceForMethod()
1432 out << "break;\n"; in generateStubSourceForMethod()
1436 out << "_hidl_err = " in generateStubSourceForMethod()
1443 out << "break;\n"; in generateStubSourceForMethod()
1446 void AST::generateStaticStubMethodSource(Formatter& out, const FQName& fqName, in generateStaticStubMethodSource() argument
1454 out << "::android::status_t " << klassName << "::_hidl_" << method->name() << "(\n"; in generateStaticStubMethodSource()
1456 out.indent(); in generateStaticStubMethodSource()
1457 out.indent(); in generateStaticStubMethodSource()
1459 out << "::android::hidl::base::V1_0::BnHwBase* _hidl_this,\n" in generateStaticStubMethodSource()
1464 out.unindent(); in generateStaticStubMethodSource()
1466 out << "#ifdef __ANDROID_DEBUGGABLE__\n"; in generateStaticStubMethodSource()
1467 out << "bool mEnableInstrumentation = _hidl_this->isInstrumentationEnabled();\n"; in generateStaticStubMethodSource()
1468 out << "const auto &mInstrumentationCallbacks = _hidl_this->getInstrumentationCallbacks();\n"; in generateStaticStubMethodSource()
1469 out << "#endif // __ANDROID_DEBUGGABLE__\n\n"; in generateStaticStubMethodSource()
1471 out << "::android::status_t _hidl_err = ::android::OK;\n"; in generateStaticStubMethodSource()
1473 out << "if (!_hidl_data.enforceInterface(" in generateStaticStubMethodSource()
1477 out.indent(); in generateStaticStubMethodSource()
1478 out << "_hidl_err = ::android::BAD_TYPE;\n"; in generateStaticStubMethodSource()
1479 out << "return _hidl_err;\n"; in generateStaticStubMethodSource()
1480 out.unindent(); in generateStaticStubMethodSource()
1481 out << "}\n\n"; in generateStaticStubMethodSource()
1483 declareCppReaderLocals(out, method->args(), false /* forResults */); in generateStaticStubMethodSource()
1487 out, in generateStaticStubMethodSource()
1497 out, in generateStaticStubMethodSource()
1514 out << elidedReturn->type().getCppResultType() in generateStaticStubMethodSource()
1521 out.join(method->args().begin(), method->args().end(), ", ", [&] (const auto &arg) { in generateStaticStubMethodSource()
1523 out << "*"; in generateStaticStubMethodSource()
1525 out << arg->name(); in generateStaticStubMethodSource()
1528 out << ");\n\n"; in generateStaticStubMethodSource()
1530 out << "::android::hardware::writeToParcel(::android::hardware::Status::ok(), " in generateStaticStubMethodSource()
1534 out, in generateStaticStubMethodSource()
1541 out.unindent(); in generateStaticStubMethodSource()
1542 out << "_hidl_error:\n"; in generateStaticStubMethodSource()
1543 out.indent(); in generateStaticStubMethodSource()
1546 out, in generateStaticStubMethodSource()
1551 out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n"; in generateStaticStubMethodSource()
1552 out << "_hidl_cb(*_hidl_reply);\n"; in generateStaticStubMethodSource()
1555 out << "bool _hidl_callbackCalled = false;\n\n"; in generateStaticStubMethodSource()
1558 out << "::android::hardware::Return<void> _hidl_ret = " << callee << "->" << method->name() in generateStaticStubMethodSource()
1561 out.join(method->args().begin(), method->args().end(), ", ", [&] (const auto &arg) { in generateStaticStubMethodSource()
1563 out << "*"; in generateStaticStubMethodSource()
1566 out << arg->name(); in generateStaticStubMethodSource()
1571 out << ", "; in generateStaticStubMethodSource()
1574 out << "[&]("; in generateStaticStubMethodSource()
1576 … out.join(method->results().begin(), method->results().end(), ", ", [&](const auto &arg) { in generateStaticStubMethodSource()
1577 out << "const auto &_hidl_out_" << arg->name(); in generateStaticStubMethodSource()
1580 out << ") {\n"; in generateStaticStubMethodSource()
1581 out.indent(); in generateStaticStubMethodSource()
1582 out << "if (_hidl_callbackCalled) {\n"; in generateStaticStubMethodSource()
1583 out.indent(); in generateStaticStubMethodSource()
1584 out << "LOG_ALWAYS_FATAL(\"" in generateStaticStubMethodSource()
1587 out.unindent(); in generateStaticStubMethodSource()
1588 out << "}\n"; in generateStaticStubMethodSource()
1589 out << "_hidl_callbackCalled = true;\n\n"; in generateStaticStubMethodSource()
1591 out << "::android::hardware::writeToParcel(::android::hardware::Status::ok(), " in generateStaticStubMethodSource()
1596 out, in generateStaticStubMethodSource()
1606 out.unindent(); in generateStaticStubMethodSource()
1607 out << "_hidl_error:\n"; in generateStaticStubMethodSource()
1608 out.indent(); in generateStaticStubMethodSource()
1612 out, in generateStaticStubMethodSource()
1617 out << "if (_hidl_err != ::android::OK) { return; }\n"; in generateStaticStubMethodSource()
1618 out << "_hidl_cb(*_hidl_reply);\n"; in generateStaticStubMethodSource()
1620 out.unindent(); in generateStaticStubMethodSource()
1621 out << "});\n\n"; in generateStaticStubMethodSource()
1623 out << ");\n\n"; in generateStaticStubMethodSource()
1624 out << "(void) _hidl_cb;\n\n"; in generateStaticStubMethodSource()
1626 out, in generateStaticStubMethodSource()
1632 out << "_hidl_ret.assertOk();\n"; in generateStaticStubMethodSource()
1635 out << "if (!_hidl_callbackCalled) {\n"; in generateStaticStubMethodSource()
1636 out.indent(); in generateStaticStubMethodSource()
1637 out << "LOG_ALWAYS_FATAL(\"" in generateStaticStubMethodSource()
1640 out.unindent(); in generateStaticStubMethodSource()
1641 out << "}\n\n"; in generateStaticStubMethodSource()
1643 out << "::android::hardware::writeToParcel(" in generateStaticStubMethodSource()
1649 out << "return _hidl_err;\n"; in generateStaticStubMethodSource()
1650 out.unindent(); in generateStaticStubMethodSource()
1651 out << "}\n\n"; in generateStaticStubMethodSource()
1654 void AST::generatePassthroughHeader(Formatter& out) const { in generatePassthroughHeader()
1667 out << "#ifndef " << guard << "\n"; in generatePassthroughHeader()
1668 out << "#define " << guard << "\n\n"; in generatePassthroughHeader()
1670 out << "#include <android-base/macros.h>\n"; in generatePassthroughHeader()
1671 out << "#include <cutils/trace.h>\n"; in generatePassthroughHeader()
1672 out << "#include <future>\n"; in generatePassthroughHeader()
1674 generateCppPackageInclude(out, mPackage, iface->definedName()); in generatePassthroughHeader()
1675 out << "\n"; in generatePassthroughHeader()
1677 out << "#include <hidl/HidlPassthroughSupport.h>\n"; in generatePassthroughHeader()
1678 out << "#include <hidl/TaskRunner.h>\n"; in generatePassthroughHeader()
1680 enterLeaveNamespace(out, true /* enter */); in generatePassthroughHeader()
1681 out << "\n"; in generatePassthroughHeader()
1683 out << "struct " << klassName << " : " << iface->definedName() in generatePassthroughHeader()
1686 out.indent(); in generatePassthroughHeader()
1687 out << "explicit " << klassName << "(const ::android::sp<" << iface->definedName() in generatePassthroughHeader()
1690 out.endl(); in generatePassthroughHeader()
1691 generateTemplatizationLink(out); in generatePassthroughHeader()
1692 generateCppTag(out, "::android::hardware::details::bs_tag"); in generatePassthroughHeader()
1694 generateMethods(out, [&](const Method* method, const Interface* superInterface) { in generatePassthroughHeader()
1695 generatePassthroughMethod(out, method, superInterface); in generatePassthroughHeader()
1698 out.unindent(); in generatePassthroughHeader()
1699 out << "private:\n"; in generatePassthroughHeader()
1700 out.indent(); in generatePassthroughHeader()
1701 out << "const ::android::sp<" << iface->definedName() << "> mImpl;\n"; in generatePassthroughHeader()
1703 out << "::android::hardware::details::TaskRunner mOnewayQueue;\n"; in generatePassthroughHeader()
1705 out << "\n"; in generatePassthroughHeader()
1707 out << "::android::hardware::Return<void> addOnewayTask(" in generatePassthroughHeader()
1710 out.unindent(); in generatePassthroughHeader()
1712 out << "};\n\n"; in generatePassthroughHeader()
1714 enterLeaveNamespace(out, false /* enter */); in generatePassthroughHeader()
1716 out << "\n#endif // " << guard << "\n"; in generatePassthroughHeader()
1719 void AST::generateInterfaceSource(Formatter& out) const { in generateInterfaceSource()
1725 generateMethods(out, [&](const Method* method, const Interface*) { in generateInterfaceSource()
1729 out << "// no default implementation for: "; in generateInterfaceSource()
1731 method->generateCppSignature(out, iface->definedName()); in generateInterfaceSource()
1733 out.block([&]() { in generateInterfaceSource()
1734 method->cppImpl(IMPL_INTERFACE, out); in generateInterfaceSource()
1738 out << "\n"; in generateInterfaceSource()
1744 out << "::android::hardware::Return<" << childTypeResult << "> " << iface->definedName() in generateInterfaceSource()
1747 out.indent(); in generateInterfaceSource()
1749 out << "return parent;\n"; in generateInterfaceSource()
1751 out << "return ::android::hardware::details::castInterface<"; in generateInterfaceSource()
1752 out << iface->definedName() << ", " << superType->fqName().cppName() << ", " in generateInterfaceSource()
1754 out.indent(); in generateInterfaceSource()
1755 out.indent(); in generateInterfaceSource()
1756 out << "parent, \"" in generateInterfaceSource()
1759 out.unindent(); in generateInterfaceSource()
1760 out.unindent(); in generateInterfaceSource()
1762 out.unindent(); in generateInterfaceSource()
1763 out << "}\n\n"; in generateInterfaceSource()
1767 void AST::generatePassthroughSource(Formatter& out) const { in generatePassthroughSource()
1772 out << klassName << "::" << klassName << "(const ::android::sp<" << iface->fullName() in generatePassthroughSource()
1776 out.indent([&] { out << "mOnewayQueue.start(3000 /* similar limit to binderized */);\n"; }); in generatePassthroughSource()
1778 out << "}\n\n"; in generatePassthroughSource()
1780 out << "::android::hardware::Return<void> " << klassName in generatePassthroughSource()
1782 out.indent(); in generatePassthroughSource()
1783 out << "if (!mOnewayQueue.push(fun)) {\n"; in generatePassthroughSource()
1784 out.indent(); in generatePassthroughSource()
1785 out << "return ::android::hardware::Status::fromExceptionCode(\n"; in generatePassthroughSource()
1786 out.indent(); in generatePassthroughSource()
1787 out.indent(); in generatePassthroughSource()
1788 out << "::android::hardware::Status::EX_TRANSACTION_FAILED,\n" in generatePassthroughSource()
1790 out.unindent(); in generatePassthroughSource()
1791 out.unindent(); in generatePassthroughSource()
1792 out.unindent(); in generatePassthroughSource()
1793 out << "}\n"; in generatePassthroughSource()
1795 out << "return ::android::hardware::Status();\n"; in generatePassthroughSource()
1797 out.unindent(); in generatePassthroughSource()
1798 out << "}\n\n"; in generatePassthroughSource()
1801 void AST::generateCppAtraceCall(Formatter &out, in generateCppAtraceCall() argument
1809 out << "atrace_begin(ATRACE_TAG_HAL, \"" in generateCppAtraceCall()
1815 out << "atrace_begin(ATRACE_TAG_HAL, \"" in generateCppAtraceCall()
1822 out << "atrace_end(ATRACE_TAG_HAL);\n"; in generateCppAtraceCall()
1829 out << "::android::ScopedTrace PASTE(___tracer, __LINE__) (ATRACE_TAG_HAL, \"" in generateCppAtraceCall()
1843 Formatter &out, in generateCppInstrumentationCall() argument
1847 generateCppAtraceCall(out, event, method); in generateCppInstrumentationCall()
1849 out << "#ifdef __ANDROID_DEBUGGABLE__\n"; in generateCppInstrumentationCall()
1850 out << "if (UNLIKELY(mEnableInstrumentation)) {\n"; in generateCppInstrumentationCall()
1851 out.indent(); in generateCppInstrumentationCall()
1852 out << "std::vector<void *> _hidl_args;\n"; in generateCppInstrumentationCall()
1859 out << "_hidl_args.push_back((void *)" in generateCppInstrumentationCall()
1870 out << "_hidl_args.push_back((void *)&_hidl_out_" in generateCppInstrumentationCall()
1880 out << "_hidl_args.push_back((void *)&" in generateCppInstrumentationCall()
1890 out << "_hidl_args.push_back((void *)" in generateCppInstrumentationCall()
1902 out << "_hidl_args.push_back((void *)&" in generateCppInstrumentationCall()
1912 out << "_hidl_args.push_back((void *)&_hidl_out_" in generateCppInstrumentationCall()
1924 out << "for (const auto &callback: mInstrumentationCallbacks) {\n"; in generateCppInstrumentationCall()
1925 out.indent(); in generateCppInstrumentationCall()
1926 out << "callback(" << event_str << ", \"" << superInterface->fqName().package() << "\", \"" in generateCppInstrumentationCall()
1929 out.unindent(); in generateCppInstrumentationCall()
1930 out << "}\n"; in generateCppInstrumentationCall()
1931 out.unindent(); in generateCppInstrumentationCall()
1932 out << "}\n"; in generateCppInstrumentationCall()
1933 out << "#endif // __ANDROID_DEBUGGABLE__\n\n"; in generateCppInstrumentationCall()