Skip to content

Commit e4c6278

Browse files
committed
Using the executor to schedule buffer add/removes
1 parent a93b6c9 commit e4c6278

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

src/include/server/mir/graphics/default_initial_render_manager.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
namespace mir
2525
{
26+
class Executor;
2627

2728
namespace time
2829
{
@@ -43,6 +44,7 @@ class DefaultInitialRenderManager : public InitialRenderManager
4344
{
4445
public:
4546
DefaultInitialRenderManager(
47+
std::shared_ptr<Executor> const& scene_executor,
4648
std::shared_ptr<time::Clock>& clock,
4749
time::AlarmFactory& alarm_factory,
4850
std::shared_ptr<input::Scene>& scene);
@@ -51,9 +53,10 @@ class DefaultInitialRenderManager : public InitialRenderManager
5153

5254
private:
5355
void remove_renderables();
56+
std::shared_ptr<Executor> const& scene_executor;
5457
std::shared_ptr<time::Clock> const& clock;
5558
std::shared_ptr<input::Scene>& scene;
56-
std::vector<std::shared_ptr<InitialRender>> renderable_list;
59+
std::vector<std::shared_ptr<Renderable>> renderable_list;
5760
std::unique_ptr<time::Alarm> const alarm;
5861
};
5962

src/server/graphics/default_configuration.cpp

+5-1
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,11 @@ mir::DefaultServerConfiguration::the_initial_render_manager(mg::Display& in_disp
507507
auto in_input_scene = the_input_scene();
508508
auto in_main_loop = the_main_loop();
509509
auto in_clock = the_clock();
510-
initial_render_manager = std::make_shared<mg::DefaultInitialRenderManager>(in_clock, *in_main_loop, in_input_scene);
510+
initial_render_manager = std::make_shared<mg::DefaultInitialRenderManager>(
511+
the_main_loop(),
512+
in_clock,
513+
*in_main_loop,
514+
in_input_scene);
511515
initial_render_manager->add_initial_render(in_display.create_initial_render());
512516
return initial_render_manager;
513517
}

src/server/graphics/default_initial_render_manager.cpp

+17-11
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,23 @@
1818
#include "mir/input/scene.h"
1919
#include "mir/time/alarm_factory.h"
2020
#include "mir/time/clock.h"
21+
#include "mir/executor.h"
2122
#include <chrono>
2223

2324
namespace mg = mir::graphics;
2425

2526
mg::DefaultInitialRenderManager::DefaultInitialRenderManager(
27+
std::shared_ptr<Executor> const& scene_executor,
2628
std::shared_ptr<time::Clock>&clock,
2729
time::AlarmFactory &alarm_factory,
2830
std::shared_ptr<input::Scene>& scene)
29-
: clock{clock},
30-
scene{scene},
31-
alarm{alarm_factory.create_alarm([&]{
31+
: scene_executor{scene_executor},
32+
clock{clock},
33+
scene{scene},
34+
alarm{alarm_factory.create_alarm([&]{
3235
remove_renderables();
3336
alarm->cancel();
34-
})}
37+
})}
3538
{
3639
time::Timestamp scheduled_time = clock->now() + std::chrono::seconds {5};
3740
alarm->reschedule_for(scheduled_time);
@@ -48,19 +51,22 @@ void mg::DefaultInitialRenderManager::add_initial_render(std::shared_ptr<Initial
4851

4952
for (auto const& renderable : initial_render->get_renderables())
5053
{
51-
scene->add_input_visualization(renderable);
54+
scene_executor->spawn([scene = scene, to_add = renderable]()
55+
{
56+
scene->add_input_visualization(to_add);
57+
});
58+
renderable_list.push_back(renderable);
5259
}
53-
renderable_list.push_back(initial_render);
5460
}
5561

5662
void mg::DefaultInitialRenderManager::remove_renderables()
5763
{
58-
for (auto inital_render : renderable_list)
64+
for (auto const& renderable : renderable_list)
5965
{
60-
for (auto const& renderable : inital_render->get_renderables())
61-
{
62-
scene->remove_input_visualization(renderable);
63-
}
66+
scene_executor->spawn([scene = scene, to_remove = renderable]()
67+
{
68+
scene->remove_input_visualization(to_remove);
69+
});
6470
}
6571
renderable_list.clear();
6672
}

0 commit comments

Comments
 (0)