mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 12:20:52 +01:00
Test Plan: revert-hammer
Differential Revision:
D33163841
Original commit changeset: e262b6d8c80a
Original Phabricator Diff: D33102715 (eb374de3f5)
fbshipit-source-id: 644216036a238a458f0a2198460b36d24fb035f8
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#include <torch/csrc/monitor/events.h>
|
|
|
|
#include <algorithm>
|
|
#include <mutex>
|
|
#include <sstream>
|
|
#include <unordered_set>
|
|
#include <vector>
|
|
|
|
namespace torch {
|
|
namespace monitor {
|
|
|
|
namespace {
|
|
class EventHandlers {
|
|
public:
|
|
void registerEventHandler(std::shared_ptr<EventHandler> handler) noexcept {
|
|
std::unique_lock<std::mutex> lock(mu_);
|
|
|
|
handlers_.emplace_back(std::move(handler));
|
|
}
|
|
|
|
void unregisterEventHandler(
|
|
const std::shared_ptr<EventHandler>& handler) noexcept {
|
|
std::unique_lock<std::mutex> lock(mu_);
|
|
|
|
auto it = std::find(handlers_.begin(), handlers_.end(), handler);
|
|
handlers_.erase(it);
|
|
}
|
|
|
|
void logEvent(const Event& e) {
|
|
std::unique_lock<std::mutex> lock(mu_);
|
|
|
|
for (auto& handler : handlers_) {
|
|
handler->handle(e);
|
|
}
|
|
}
|
|
|
|
static EventHandlers& get() noexcept {
|
|
static EventHandlers ehs;
|
|
return ehs;
|
|
}
|
|
|
|
private:
|
|
std::mutex mu_{};
|
|
std::vector<std::shared_ptr<EventHandler>> handlers_{};
|
|
};
|
|
} // namespace
|
|
|
|
void logEvent(const Event& e) {
|
|
EventHandlers::get().logEvent(e);
|
|
}
|
|
|
|
void registerEventHandler(std::shared_ptr<EventHandler> p) {
|
|
EventHandlers::get().registerEventHandler(std::move(p));
|
|
}
|
|
|
|
void unregisterEventHandler(const std::shared_ptr<EventHandler>& p) {
|
|
EventHandlers::get().unregisterEventHandler(p);
|
|
}
|
|
|
|
} // namespace monitor
|
|
} // namespace torch
|