sapling/eden/fs/telemetry/IActivityRecorder.h
Zhengchao Liu f2eb6aee68 fix thread safety issues in ActivityRecorder CLI
Summary:
This addressed 2 thread safety issues:
1. holding strong reference to `EdenMount`
2. converting unowned `stringPiece` to `std::string`

Reviewed By: chadaustin

Differential Revision: D30657955

fbshipit-source-id: 870e972d9e0fe3897e021aeca77bf2db8c5fbb20
2021-08-30 19:30:08 -07:00

50 lines
1.3 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This software may be used and distributed according to the terms of the
* GNU General Public License version 2.
*/
#pragma once
#include <functional>
#include <memory>
#include <optional>
#include "eden/fs/utils/PathFuncs.h"
namespace facebook::eden {
class EdenMount;
class IActivityRecorder {
public:
explicit IActivityRecorder(std::shared_ptr<EdenMount> edenMount)
: edenMount_{std::move(edenMount)} {}
virtual ~IActivityRecorder() = default;
virtual uint64_t addSubscriber(AbsolutePathPiece outputPath) = 0;
virtual std::optional<std::string> removeSubscriber(uint64_t unique) = 0;
virtual std::vector<std::tuple<uint64_t, std::string>> getSubscribers() = 0;
protected:
std::shared_ptr<EdenMount> edenMount_;
};
class NullActivityRecorder : public IActivityRecorder {
public:
NullActivityRecorder() : IActivityRecorder{{}} {}
uint64_t addSubscriber(AbsolutePathPiece /* outputPath */) override {
return 0;
}
std::optional<std::string> removeSubscriber(uint64_t /* unique */) override {
return std::nullopt;
}
std::vector<std::tuple<uint64_t, std::string>> getSubscribers() override {
return {};
}
};
using ActivityRecorderFactory =
std::function<std::unique_ptr<IActivityRecorder>(
std::shared_ptr<EdenMount>)>;
} // namespace facebook::eden