blob: 2d1a45ec4c4d6978d03dbbd2bd2f276980c7ec2a [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <lib/fzl/time.h>
#include <fs/metrics/composite_latency_event.h>
namespace fs_metrics {
namespace internal {
cobalt_client::Histogram<fs_metrics::FsCommonMetrics::kHistogramBuckets>* SelectHistogram(
const Event event, fs_metrics::FsCommonMetrics* metrics) {
switch (event) {
case Event::kClose:
return &metrics->vnode.close;
case Event::kRead:
return &metrics->vnode.read;
case Event::kWrite:
return &metrics->vnode.write;
case Event::kAppend:
return &metrics->vnode.append;
case Event::kTruncate:
return &metrics->vnode.truncate;
case Event::kSetAttr:
return &metrics->vnode.set_attr;
case Event::kGetAttr:
return &metrics->vnode.get_attr;
case Event::kReadDir:
return &metrics->vnode.read_dir;
case Event::kSync:
return &metrics->vnode.sync;
case Event::kLookUp:
return &metrics->vnode.look_up;
case Event::kCreate:
return &metrics->vnode.create;
case Event::kLink:
return &metrics->vnode.link;
case Event::kUnlink:
return &metrics->vnode.unlink;
case Event::kJournalWriteData:
return &metrics->journal.write_data;
case Event::kJournalWriteMetadata:
return &metrics->journal.write_metadata;
case Event::kJournalTrimData:
return &metrics->journal.trim_data;
case Event::kJournalSync:
return &metrics->journal.sync;
case Event::kJournalScheduleTask:
return &metrics->journal.schedule_task;
case Event::kJournalWriterWriteData:
return &metrics->journal.writer_write_data;
case Event::kJournalWriterWriteMetadata:
return &metrics->journal.writer_write_metadata;
case Event::kJournalWriterTrimData:
return &metrics->journal.writer_trim_data;
case Event::kJournalWriterSync:
return &metrics->journal.writer_sync;
case Event::kJournalWriterWriteInfoBlock:
return &metrics->journal.writer_write_info_block;
default:
return nullptr;
};
}
} // namespace internal
CompositeLatencyEvent::CompositeLatencyEvent(Event event,
fs_metrics::Histograms* histogram_collection,
fs_metrics::FsCommonMetrics* metrics)
: inspect_event_(histogram_collection, event) {
cobalt_histogram_ = internal::SelectHistogram(event, metrics);
}
CompositeLatencyEvent::~CompositeLatencyEvent() {
if (cobalt_histogram_ != nullptr && inspect_event_.start().get() > 0) {
zx::ticks delta = zx::ticks::now() - inspect_event_.start();
cobalt_histogram_->Add(fzl::TicksToNs(delta).get());
}
}
void CompositeLatencyEvent::Cancel() { inspect_event_.Cancel(); }
void CompositeLatencyEvent::Reset() { inspect_event_.Reset(); }
} // namespace fs_metrics