summaryrefslogtreecommitdiff
path: root/include/util/profiling/profile_buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/util/profiling/profile_buffer.h')
-rw-r--r--include/util/profiling/profile_buffer.h162
1 files changed, 0 insertions, 162 deletions
diff --git a/include/util/profiling/profile_buffer.h b/include/util/profiling/profile_buffer.h
deleted file mode 100644
index 8785a40d3..000000000
--- a/include/util/profiling/profile_buffer.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-#ifndef TENSORFLOW_CONTRIB_LITE_PROFILING_PROFILE_BUFFER_H_
-#define TENSORFLOW_CONTRIB_LITE_PROFILING_PROFILE_BUFFER_H_
-
-#include <cstddef>
-#include <cstdint>
-
-#include "util/profiling/time.h"
-
-namespace tflite {
-namespace profiling {
-
-// A profiling event.
-struct ProfileEvent {
- // Describes the type of event.
- // The event_metadata field may contain additional data for interpreting
- // the event.
- enum class EventType {
- // Default event type, the metadata field has no special significance.
- DEFAULT = 0,
- // The event is an operator invocation and the event_metadata field is the
- // index of operator node.
- OPERATOR_INVOKE_EVENT = 1
- };
-
- // Label of the event. This usually describes the event.
- const char* tag;
- // Timestamp in microseconds when the event began.
- uint64_t begin_timestamp_us;
- // Timestamp in microseconds when the event ended.
- uint64_t end_timestamp_us;
- // The field containing the type of event. This must be one of the event types
- // in EventType.
- EventType event_type;
- // Extra data describing the details of the event.
- uint32_t event_metadata;
-};
-} // namespace profiling
-} // namespace tflite
-
-#ifdef TFLITE_PROFILING_ENABLED
-
-#include <sys/time.h>
-#include <vector>
-
-namespace tflite {
-namespace profiling {
-constexpr uint32_t kInvalidEventHandle = static_cast<uint32_t>(~0) - 1;
-
-// A ring buffer of profile events.
-// This class is not thread safe.
-class ProfileBuffer {
- public:
- ProfileBuffer(uint32_t max_num_entries, bool enabled)
- : enabled_(enabled), current_index_(0), event_buffer_(max_num_entries) {}
-
- // Adds an event to the buffer with begin timestamp set to the current
- // timestamp. Returns a handle to event that can be used to call EndEvent. If
- // buffer is disabled this has no affect.
- // The tag of the event should remain valid till the buffer is valid.
- uint32_t BeginEvent(const char* tag, ProfileEvent::EventType event_type,
- uint32_t event_metadata) {
- if (!enabled_) {
- return kInvalidEventHandle;
- }
- uint64_t timestamp = time::NowMicros();
- int index = current_index_ % event_buffer_.size();
- event_buffer_[index].tag = tag;
- event_buffer_[index].event_type = event_type;
- event_buffer_[index].event_metadata = event_metadata;
- event_buffer_[index].begin_timestamp_us = timestamp;
- event_buffer_[index].end_timestamp_us = 0;
- current_index_++;
- return index;
- }
-
- // Sets the enabled state of buffer to |enabled|
- void SetEnabled(bool enabled) { enabled_ = enabled; }
-
- // Sets the end timestamp for event for the handle to current time.
- // If the buffer is disabled or previous event has been overwritten this
- // operation has not effect.
- void EndEvent(uint32_t event_handle) {
- if (!enabled_ || event_handle == kInvalidEventHandle ||
- event_handle > current_index_) {
- return;
- }
- const uint32_t max_size = event_buffer_.size();
- if (current_index_ > (max_size + event_handle)) {
- // Ignore, buffer has already overflowed.
- return;
- }
-
- int event_index = event_handle % max_size;
- event_buffer_[event_index].end_timestamp_us = time::NowMicros();
- }
-
- // Returns the size of the buffer.
- size_t Size() const {
- return (current_index_ >= event_buffer_.size()) ? event_buffer_.size()
- : current_index_;
- }
-
- // Resets the buffer.
- void Reset() {
- enabled_ = false;
- current_index_ = 0;
- }
-
- // Returns the profile event at the given index. If the index is invalid a
- // nullptr is returned. The return event may get overwritten if more events
- // are added to buffer.
- const struct ProfileEvent* const At(int index) const {
- size_t size = Size();
- if (index >= size) {
- return nullptr;
- }
- const uint32_t max_size = event_buffer_.size();
- uint32_t start =
- (current_index_ > max_size) ? current_index_ % max_size : max_size;
- index = (index + start) % max_size;
- return &event_buffer_[index];
- }
-
- private:
- bool enabled_;
- uint32_t current_index_;
- std::vector<ProfileEvent> event_buffer_;
-};
-} // namespace profiling
-} // namespace tflite
-#endif // TFLITE_PROFILING_ENABLED
-#endif // TENSORFLOW_CONTRIB_LITE_PROFILING_PROFILE_BUFFER_H_