support multiple listeners based on pid
This commit is contained in:
@@ -23,10 +23,12 @@ void Kernel::main_loop()
|
||||
return;
|
||||
}
|
||||
m_render_target->bind();
|
||||
m_listener->onServiceInitialized(true);
|
||||
for (const auto& [pid, l] : m_listeners)
|
||||
l->onServiceInitialized(true);
|
||||
m_aidl_buffer = std::make_unique<HardwareBuffer>();
|
||||
m_aidl_buffer->reset(m_render_target->hardware_buffer());
|
||||
m_listener->onBufferAvailable(*m_aidl_buffer);
|
||||
for (const auto& [pid, l] : m_listeners)
|
||||
l->onBufferAvailable(*m_aidl_buffer);
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -37,23 +39,25 @@ void Kernel::main_loop()
|
||||
glFinish();
|
||||
{
|
||||
std::lock_guard _lock(m_mutex);
|
||||
m_listener->onFrameAvailable();
|
||||
for (const auto& [pid, l] : m_listeners)
|
||||
l->onFrameAvailable();
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
}
|
||||
}
|
||||
|
||||
Kernel::Kernel(const std::shared_ptr<IMosisListener> &listener) : m_listener(listener)
|
||||
Kernel::Kernel(const std::shared_ptr<IMosisListener> &listener)
|
||||
{
|
||||
m_listeners.emplace(AIBinder_getCallingPid(), listener);
|
||||
m_main_loop_thread = std::thread(&Kernel::main_loop, this);
|
||||
}
|
||||
|
||||
void Kernel::set_listener(const std::shared_ptr<IMosisListener> &listener)
|
||||
void Kernel::add_listener(const std::shared_ptr<IMosisListener> &listener)
|
||||
{
|
||||
std::lock_guard _lock(m_mutex);
|
||||
m_listener = listener;
|
||||
m_listener->onServiceInitialized(true);
|
||||
m_listener->onBufferAvailable(*m_aidl_buffer);
|
||||
m_listeners.emplace(AIBinder_getCallingPid(), listener);
|
||||
listener->onServiceInitialized(true);
|
||||
listener->onBufferAvailable(*m_aidl_buffer);
|
||||
}
|
||||
|
||||
Kernel::~Kernel() = default;
|
||||
|
||||
Reference in New Issue
Block a user