Skip to content

Commit fd6578c

Browse files
committed
Run gRPC service independently
1 parent f0a8f27 commit fd6578c

File tree

6 files changed

+51
-16
lines changed

6 files changed

+51
-16
lines changed

capture_service/server.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ limitations under the License.
1818

1919
namespace Dive
2020
{
21-
int server_main();
22-
}
21+
void StopServer();
22+
int server_main();
23+
} // namespace Dive

capture_service/service.cc

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,22 @@ grpc::Status DiveServiceImpl::DownloadFile(grpc::ServerContext *cont
132132
return grpc::Status::OK;
133133
}
134134

135+
std::unique_ptr<grpc::Server> &GetServer()
136+
{
137+
static std::unique_ptr<grpc::Server> server = nullptr;
138+
return server;
139+
}
140+
141+
void StopServer()
142+
{
143+
auto &server = GetServer();
144+
if (server)
145+
{
146+
LOGI("StopServer at service.cc");
147+
server->Shutdown();
148+
}
149+
}
150+
135151
void RunServer(uint16_t port)
136152
{
137153
std::string server_address = absl::StrFormat("0.0.0.0:%d", port);
@@ -142,7 +158,8 @@ void RunServer(uint16_t port)
142158
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
143159

144160
builder.RegisterService(&service);
145-
std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
161+
auto &server = GetServer();
162+
server = builder.BuildAndStart();
146163
LOGI("Server listening on %s", server_address.c_str());
147164
server->Wait();
148165
}

layer/layer_common.cc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,20 @@ ServerRunner &GetServerRunner()
7777
return runner;
7878
}
7979

80+
Server::Server()
81+
{
82+
server_thread = std::thread(Dive::server_main);
83+
}
84+
85+
void Server::StopServer()
86+
{
87+
Dive::StopServer();
88+
if (server_thread.joinable())
89+
{
90+
server_thread.join();
91+
}
92+
}
93+
94+
Server server;
95+
8096
} // namespace DiveLayer

layer/layer_common.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,13 @@ class ServerRunner
4242

4343
ServerRunner &GetServerRunner();
4444

45+
struct Server
46+
{
47+
std::thread server_thread;
48+
Server();
49+
void StopServer();
50+
};
51+
52+
extern Server server;
53+
4554
} // namespace DiveLayer

layer/openxr_layer.cc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,6 @@ struct XrSessionData
5656
{
5757
XrSession session;
5858
XrGeneratedDispatchTable dispatch_table;
59-
ServerRunner &server;
60-
61-
XrSessionData() :
62-
server(GetServerRunner())
63-
{
64-
}
6559
};
6660

6761
static thread_local XrInstanceData *last_used_xr_instance_data = nullptr;
@@ -190,7 +184,7 @@ XRAPI_ATTR XrResult XRAPI_CALL ApiDiveLayerXrDestroyInstance(XrInstance instance
190184

191185
LOGD("ApiDiveLayerXrDestroyInstance\n");
192186
XrResult result = XR_SUCCESS;
193-
187+
server.StopServer();
194188
auto sess_data = GetXrInstanceLayerData(DataKey(instance));
195189
if (sess_data)
196190
{

layer/vk_layer_base.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ struct InstanceData
4343
{
4444
VkInstance instance;
4545
InstanceDispatchTable dispatch_table;
46-
ServerRunner &server;
47-
48-
InstanceData() :
49-
server(GetServerRunner())
50-
{
51-
}
5246
};
5347

5448
struct DeviceData
@@ -515,6 +509,10 @@ extern "C"
515509
return (PFN_vkVoidFunction)&DiveInterceptEnumerateInstanceExtensionProperties;
516510
if (0 == strcmp(func, "vkCreateInstance"))
517511
return (PFN_vkVoidFunction)&DiveInterceptCreateInstance;
512+
if (0 == strcmp(func, "vkDestroyInstance"))
513+
{
514+
LOGI("vkDestroyInstance");
515+
}
518516
if (inst == VK_NULL_HANDLE)
519517
return NULL;
520518

0 commit comments

Comments
 (0)