Skip to content

Commit 53b5289

Browse files
omerjerkfacebook-github-bot
authored andcommitted
Allow querying all backends registered with the executorch runtime
Summary: Partially resolves: #8267 Differential Revision: D69754074
1 parent 5e4d6b6 commit 53b5289

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

runtime/backend/interface.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ BackendInterface* get_backend_class(const char* name) {
4141
return nullptr;
4242
}
4343

44+
std::vector<BackendInterface*> get_all_backend_classes() {
45+
std::vector<BackendInterface*> backends(num_registered_backends);
46+
for (size_t i = 0; i < num_registered_backends; i++) {
47+
backends[i] = registered_backends[i].backend;
48+
}
49+
return backends;
50+
}
51+
4452
Error register_backend(const Backend& backend) {
4553
if (num_registered_backends >= kMaxRegisteredBackends) {
4654
return Error::Internal;

runtime/backend/interface.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#pragma once
1010

1111
#include <cstring>
12+
#include <vector>
1213

1314
#include <executorch/runtime/backend/backend_execution_context.h>
1415
#include <executorch/runtime/backend/backend_init_context.h>
@@ -120,6 +121,12 @@ class BackendInterface {
120121
*/
121122
BackendInterface* get_backend_class(const char* name);
122123

124+
/**
125+
* Returns the vector of pointers to all the registered backends.
126+
* The mapping is populated using register_backend method.
127+
*/
128+
std::vector<BackendInterface*> get_all_backend_classes();
129+
123130
/**
124131
* A named instance of a backend.
125132
*/

runtime/executor/test/backend_integration_test.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,13 @@ TEST_P(BackendIntegrationTest, BackendIsPresent) {
330330
ASSERT_EQ(backend, &StubBackend::singleton());
331331
}
332332

333+
TEST_P(BackendIntegrationTest, BackendIsPresentInAll) {
334+
std::vector<BackendInterface*> backends =
335+
executorch::runtime::get_all_backend_classes();
336+
ASSERT_EQ(backends.size(), 1);
337+
ASSERT_EQ(backends[0], &StubBackend::singleton());
338+
}
339+
333340
// Demonstrate that installed StubBackend initializes successfully by default.
334341
TEST_P(BackendIntegrationTest, BasicInitSucceeds) {
335342
Result<FileDataLoader> loader = FileDataLoader::from(program_path());

0 commit comments

Comments
 (0)