Merge "Codec2: Retry interface creation until successful" into qt-qpr1-dev

gugelfrei
TreeHugger Robot 5 years ago committed by Android (Google) Code Review
commit d4473d4ed2

@ -883,66 +883,72 @@ std::shared_ptr<Codec2Client::Component>
Codec2Client::CreateComponentByName(
const char* componentName,
const std::shared_ptr<Listener>& listener,
std::shared_ptr<Codec2Client>* owner) {
std::shared_ptr<Component> component;
c2_status_t status = ForAllServices(
componentName,
[owner, &component, componentName, &listener](
const std::shared_ptr<Codec2Client> &client)
-> c2_status_t {
c2_status_t status = client->createComponent(componentName,
listener,
&component);
if (status == C2_OK) {
if (owner) {
*owner = client;
std::shared_ptr<Codec2Client>* owner,
size_t numberOfAttempts) {
while (true) {
std::shared_ptr<Component> component;
c2_status_t status = ForAllServices(
componentName,
[owner, &component, componentName, &listener](
const std::shared_ptr<Codec2Client> &client)
-> c2_status_t {
c2_status_t status = client->createComponent(componentName,
listener,
&component);
if (status == C2_OK) {
if (owner) {
*owner = client;
}
} else if (status != C2_NOT_FOUND) {
LOG(DEBUG) << "IComponentStore("
<< client->getServiceName()
<< ")::createComponent(\"" << componentName
<< "\") returned status = "
<< status << ".";
}
} else if (status != C2_NOT_FOUND) {
LOG(DEBUG) << "IComponentStore("
<< client->getServiceName()
<< ")::createComponent(\"" << componentName
<< "\") returned status = "
<< status << ".";
}
return status;
});
if (status != C2_OK) {
LOG(DEBUG) << "Could not create component \"" << componentName << "\". "
"Status = " << status << ".";
return status;
});
if (numberOfAttempts > 0 && status == C2_TRANSACTION_FAILED) {
--numberOfAttempts;
continue;
}
return component;
}
return component;
}
std::shared_ptr<Codec2Client::Interface>
Codec2Client::CreateInterfaceByName(
const char* interfaceName,
std::shared_ptr<Codec2Client>* owner) {
std::shared_ptr<Interface> interface;
c2_status_t status = ForAllServices(
interfaceName,
[owner, &interface, interfaceName](
const std::shared_ptr<Codec2Client> &client)
-> c2_status_t {
c2_status_t status = client->createInterface(interfaceName,
&interface);
if (status == C2_OK) {
if (owner) {
*owner = client;
std::shared_ptr<Codec2Client>* owner,
size_t numberOfAttempts) {
while (true) {
std::shared_ptr<Interface> interface;
c2_status_t status = ForAllServices(
interfaceName,
[owner, &interface, interfaceName](
const std::shared_ptr<Codec2Client> &client)
-> c2_status_t {
c2_status_t status = client->createInterface(interfaceName,
&interface);
if (status == C2_OK) {
if (owner) {
*owner = client;
}
} else if (status != C2_NOT_FOUND) {
LOG(DEBUG) << "IComponentStore("
<< client->getServiceName()
<< ")::createInterface(\"" << interfaceName
<< "\") returned status = "
<< status << ".";
}
} else if (status != C2_NOT_FOUND) {
LOG(DEBUG) << "IComponentStore("
<< client->getServiceName()
<< ")::createInterface(\"" << interfaceName
<< "\") returned status = "
<< status << ".";
}
return status;
});
if (status != C2_OK) {
LOG(DEBUG) << "Could not create interface \"" << interfaceName << "\". "
"Status = " << status << ".";
return status;
});
if (numberOfAttempts > 0 && status == C2_TRANSACTION_FAILED) {
--numberOfAttempts;
continue;
}
return interface;
}
return interface;
}
std::vector<C2Component::Traits> const& Codec2Client::ListComponents() {

@ -179,17 +179,21 @@ struct Codec2Client : public Codec2ConfigurableClient {
static std::vector<std::shared_ptr<Codec2Client>> CreateFromAllServices();
// Try to create a component with a given name from all known
// IComponentStore services.
// IComponentStore services. numberOfAttempts determines the number of times
// to retry the HIDL call if the transaction fails.
static std::shared_ptr<Component> CreateComponentByName(
char const* componentName,
std::shared_ptr<Listener> const& listener,
std::shared_ptr<Codec2Client>* owner = nullptr);
std::shared_ptr<Codec2Client>* owner = nullptr,
size_t numberOfAttempts = 10);
// Try to create a component interface with a given name from all known
// IComponentStore services.
// IComponentStore services. numberOfAttempts determines the number of times
// to retry the HIDL call if the transaction fails.
static std::shared_ptr<Interface> CreateInterfaceByName(
char const* interfaceName,
std::shared_ptr<Codec2Client>* owner = nullptr);
std::shared_ptr<Codec2Client>* owner = nullptr,
size_t numberOfAttempts = 10);
// List traits from all known IComponentStore services.
static std::vector<C2Component::Traits> const& ListComponents();

Loading…
Cancel
Save