Skip to content

Commit 0a7316b

Browse files
committed
Add static creation method for SystemMonitor
1 parent 902fffc commit 0a7316b

9 files changed

+61
-51
lines changed

fly/system/mac/system_monitor_impl.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class SystemMonitorImpl : public SystemMonitor
2424
* Constructor.
2525
*/
2626
SystemMonitorImpl(
27-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
28-
const std::shared_ptr<SystemConfig> &config) noexcept;
27+
std::shared_ptr<SequencedTaskRunner> task_runner,
28+
std::shared_ptr<SystemConfig> config) noexcept;
2929

3030
protected:
3131
void update_system_cpu_count() override;

fly/system/mac/system_monitor_impl.mm

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
//==================================================================================================
2222
SystemMonitorImpl::SystemMonitorImpl(
23-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
24-
const std::shared_ptr<SystemConfig> &config) noexcept :
25-
SystemMonitor(task_runner, config)
23+
std::shared_ptr<SequencedTaskRunner> task_runner,
24+
std::shared_ptr<SystemConfig> config) noexcept :
25+
SystemMonitor(std::move(task_runner), std::move(config))
2626
{
2727
}
2828

fly/system/nix/system_monitor_impl.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ namespace {
2424

2525
//==================================================================================================
2626
SystemMonitorImpl::SystemMonitorImpl(
27-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
28-
const std::shared_ptr<SystemConfig> &config) noexcept :
29-
SystemMonitor(task_runner, config)
27+
std::shared_ptr<SequencedTaskRunner> task_runner,
28+
std::shared_ptr<SystemConfig> config) noexcept :
29+
SystemMonitor(std::move(task_runner), std::move(config))
3030
{
3131
}
3232

fly/system/nix/system_monitor_impl.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class SystemMonitorImpl : public SystemMonitor
2424
* Constructor.
2525
*/
2626
SystemMonitorImpl(
27-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
28-
const std::shared_ptr<SystemConfig> &config) noexcept;
27+
std::shared_ptr<SequencedTaskRunner> task_runner,
28+
std::shared_ptr<SystemConfig> config) noexcept;
2929

3030
protected:
3131
void update_system_cpu_count() override;

fly/system/system_monitor.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
11
#include "fly/system/system_monitor.hpp"
22

3+
#include "fly/fly.hpp"
34
#include "fly/system/system_config.hpp"
45
#include "fly/task/task_runner.hpp"
56

67
#include <chrono>
78
#include <thread>
89

10+
#include FLY_OS_IMPL_PATH(system, system_monitor)
11+
912
namespace fly {
1013

14+
//==================================================================================================
15+
std::shared_ptr<SystemMonitor> SystemMonitor::create(
16+
std::shared_ptr<SequencedTaskRunner> task_runner,
17+
std::shared_ptr<SystemConfig> config)
18+
{
19+
auto system_monitor =
20+
std::make_shared<SystemMonitorImpl>(std::move(task_runner), std::move(config));
21+
return system_monitor->start() ? system_monitor : nullptr;
22+
}
23+
1124
//==================================================================================================
1225
SystemMonitor::SystemMonitor(
13-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
14-
const std::shared_ptr<SystemConfig> &config) noexcept :
26+
std::shared_ptr<SequencedTaskRunner> task_runner,
27+
std::shared_ptr<SystemConfig> config) noexcept :
1528
m_task_runner(task_runner),
1629
m_config(config)
1730
{

fly/system/system_monitor.hpp

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#pragma once
22

3-
#include "fly/fly.hpp"
4-
53
#include <atomic>
64
#include <cstdint>
75
#include <memory>
@@ -22,27 +20,21 @@ class SystemMonitor : public std::enable_shared_from_this<SystemMonitor>
2220
{
2321
public:
2422
/**
25-
* Constructor.
23+
* Create and start a system monitor.
2624
*
2725
* @param task_runner Task runner for posting monitor-related tasks onto.
28-
* @param config Reference to system configuration.
26+
* @param config Reference to system system monitor
27+
*
28+
* @return The created system monitor.
2929
*/
30-
SystemMonitor(
31-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
32-
const std::shared_ptr<SystemConfig> &config) noexcept;
30+
static std::shared_ptr<SystemMonitor>
31+
create(std::shared_ptr<SequencedTaskRunner> task_runner, std::shared_ptr<SystemConfig> config);
3332

3433
/**
3534
* Destructor.
3635
*/
3736
virtual ~SystemMonitor() = default;
3837

39-
/**
40-
* Queue a task to poll system-level resources.
41-
*
42-
* @return True if the system monitor is in a valid state.
43-
*/
44-
bool start();
45-
4638
/**
4739
* Get the system's CPU count.
4840
*
@@ -86,6 +78,16 @@ class SystemMonitor : public std::enable_shared_from_this<SystemMonitor>
8678
std::uint64_t get_process_memory_usage() const;
8779

8880
protected:
81+
/**
82+
* Constructor.
83+
*
84+
* @param task_runner Task runner for posting monitor-related tasks onto.
85+
* @param config Reference to system configuration.
86+
*/
87+
SystemMonitor(
88+
std::shared_ptr<SequencedTaskRunner> task_runner,
89+
std::shared_ptr<SystemConfig> config) noexcept;
90+
8991
/**
9092
* Update the system's current CPU count.
9193
*/
@@ -120,6 +122,13 @@ class SystemMonitor : public std::enable_shared_from_this<SystemMonitor>
120122
std::atomic<std::uint64_t> m_process_memory_usage {0};
121123

122124
private:
125+
/**
126+
* Queue a task to poll system-level resources.
127+
*
128+
* @return True if the system monitor is in a valid state.
129+
*/
130+
bool start();
131+
123132
/**
124133
* Check if the system CPU count was successfully set.
125134
*
@@ -140,5 +149,3 @@ class SystemMonitor : public std::enable_shared_from_this<SystemMonitor>
140149
};
141150

142151
} // namespace fly
143-
144-
#include FLY_OS_IMPL_PATH(system, system_monitor)

fly/system/win/system_monitor_impl.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ namespace {
1818

1919
//==================================================================================================
2020
SystemMonitorImpl::SystemMonitorImpl(
21-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
22-
const std::shared_ptr<SystemConfig> &config) noexcept :
23-
SystemMonitor(task_runner, config),
21+
std::shared_ptr<SequencedTaskRunner> task_runner,
22+
std::shared_ptr<SystemConfig> config) noexcept :
23+
SystemMonitor(std::move(task_runner), std::move(config)),
2424
m_process(::GetCurrentProcess()),
2525
m_cpu_query(nullptr),
2626
m_cpu_counter(nullptr)

fly/system/win/system_monitor_impl.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class SystemMonitorImpl : public SystemMonitor
2424
* Constructor. Open the system monitor's CPU query.
2525
*/
2626
SystemMonitorImpl(
27-
const std::shared_ptr<SequencedTaskRunner> &task_runner,
28-
const std::shared_ptr<SystemConfig> &config) noexcept;
27+
std::shared_ptr<SequencedTaskRunner> task_runner,
28+
std::shared_ptr<SystemConfig> config) noexcept;
2929

3030
/**
3131
* Destructor. Close the system monitor's CPU query.

test/system/system_monitor.cpp

+8-18
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,8 @@ class TestSystemConfig : public fly::SystemConfig
4444
CATCH_TEST_CASE("SystemMonitor", "[system]")
4545
{
4646
auto task_runner = fly::test::WaitableSequencedTaskRunner::create(fly::test::task_manager());
47-
48-
auto monitor =
49-
std::make_shared<fly::SystemMonitorImpl>(task_runner, std::make_shared<TestSystemConfig>());
50-
CATCH_REQUIRE(monitor->start());
47+
auto monitor = fly::SystemMonitor::create(task_runner, std::make_shared<TestSystemConfig>());
48+
CATCH_REQUIRE(monitor);
5149

5250
// Wait for one poll to complete before proceeding.
5351
task_runner->wait_for_task_to_complete(s_system_monitor_file);
@@ -89,21 +87,15 @@ CATCH_TEST_CASE("SystemMonitor", "[system]")
8987
{
9088
fly::test::MockSystem mock(fly::test::MockCall::Read);
9189

92-
monitor = std::make_shared<fly::SystemMonitorImpl>(
93-
task_runner,
94-
std::make_shared<fly::SystemConfig>());
95-
96-
CATCH_CHECK_FALSE(monitor->start());
97-
CATCH_CHECK(monitor->get_system_cpu_count() == 0);
90+
monitor = fly::SystemMonitor::create(task_runner, std::make_shared<fly::SystemConfig>());
91+
CATCH_CHECK_FALSE(monitor);
9892
}
9993

10094
CATCH_SECTION("Cannot update system CPU when ::read() fails")
10195
{
102-
monitor = std::make_shared<fly::SystemMonitorImpl>(
103-
task_runner,
104-
std::make_shared<fly::SystemConfig>());
96+
monitor = fly::SystemMonitor::create(task_runner, std::make_shared<fly::SystemConfig>());
97+
CATCH_REQUIRE(monitor);
10598

106-
CATCH_CHECK(monitor->start());
10799
task_runner->wait_for_task_to_complete(s_system_monitor_file);
108100

109101
fly::test::MockSystem mock(fly::test::MockCall::Read);
@@ -124,11 +116,9 @@ CATCH_TEST_CASE("SystemMonitor", "[system]")
124116

125117
CATCH_SECTION("Cannot update process CPU when ::times() fails")
126118
{
127-
monitor = std::make_shared<fly::SystemMonitorImpl>(
128-
task_runner,
129-
std::make_shared<fly::SystemConfig>());
119+
monitor = fly::SystemMonitor::create(task_runner, std::make_shared<fly::SystemConfig>());
120+
CATCH_REQUIRE(monitor);
130121

131-
CATCH_CHECK(monitor->start());
132122
task_runner->wait_for_task_to_complete(s_system_monitor_file);
133123

134124
fly::test::MockSystem mock(fly::test::MockCall::Times);

0 commit comments

Comments
 (0)