-
Notifications
You must be signed in to change notification settings - Fork 283
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor EdenStats, DurationScope and StatsGroup
Summary: To support better telemetry and logging in watchman we want to use Eden's components. Lets migrate and detangle the needed pieces. This change refactors EdenStas, DurationScope and StatsGroup.. Reviewed By: kmancini Differential Revision: D54566459 fbshipit-source-id: 8946dbdf3ca9ddbc5c30b070d305ef499541ea3a
- Loading branch information
1 parent
499091e
commit 2ee07b6
Showing
24 changed files
with
248 additions
and
172 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This software may be used and distributed according to the terms of the | ||
* GNU General Public License version 2. | ||
*/ | ||
|
||
#pragma once | ||
|
||
#include <chrono> | ||
#include <memory> | ||
|
||
#include <folly/logging/xlog.h> | ||
#include <folly/stop_watch.h> | ||
|
||
#include "eden/fs/telemetry/StatsGroup.h" | ||
|
||
namespace facebook::eden { | ||
|
||
/** | ||
* On construction, notes the current time. On destruction, records the elapsed | ||
* time in the specified Stats Duration. | ||
* | ||
* Moveable, but not copyable. | ||
*/ | ||
template <typename Stats> | ||
class DurationScope { | ||
public: | ||
using StatsPtr = RefPtr<Stats>; | ||
|
||
DurationScope() = delete; | ||
|
||
template <typename T> | ||
DurationScope(StatsPtr&& stats, StatsGroupBase::Duration T::*duration) | ||
: stats_{std::move(stats)}, | ||
// This use of std::function won't allocate on libstdc++, | ||
// libc++, or Microsoft STL. All three have a couple pointers | ||
// worth of small buffer inline storage. | ||
updateScope_{[duration](Stats& stats, StopWatch::duration elapsed) { | ||
stats.addDuration(duration, elapsed); | ||
}} { | ||
assert(stats_); | ||
} | ||
|
||
template <typename T> | ||
DurationScope(const StatsPtr& stats, StatsGroupBase::Duration T::*duration) | ||
: DurationScope{stats.copy(), duration} {} | ||
|
||
~DurationScope() noexcept { | ||
if (stats_ && updateScope_) { | ||
try { | ||
updateScope_(*stats_, stopWatch_.elapsed()); | ||
} catch (const std::exception& e) { | ||
XLOG(ERR) << "error recording duration: " << e.what(); | ||
} | ||
} | ||
} | ||
|
||
DurationScope(DurationScope&& that) = default; | ||
DurationScope& operator=(DurationScope&& that) = default; | ||
|
||
DurationScope(const DurationScope&) = delete; | ||
DurationScope& operator=(const DurationScope&) = delete; | ||
|
||
private: | ||
using StopWatch = folly::stop_watch<>; | ||
StopWatch stopWatch_; | ||
StatsPtr stats_; | ||
std::function<void(Stats& stats, StopWatch::duration)> updateScope_; | ||
}; | ||
|
||
} // namespace facebook::eden |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.