1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_COMMON_HIGH_ALLOCATION_THROUGHPUT_SCOPE_H_
6#define V8_COMMON_HIGH_ALLOCATION_THROUGHPUT_SCOPE_H_
7
8#include "include/v8-platform.h"
9
10namespace v8 {
11namespace internal {
12
13/**
14 * Scope that notifies embedder's observer about entering sections with high
15 * throughput of malloc/free operations.
16 */
17class HighAllocationThroughputScope final {
18 public:
19  explicit HighAllocationThroughputScope(Platform* platform)
20      : observer_(platform->GetHighAllocationThroughputObserver()) {
21    observer_->LeaveSection();
22  }
23
24  HighAllocationThroughputScope(const HighAllocationThroughputScope&) = delete;
25  HighAllocationThroughputScope& operator=(
26      const HighAllocationThroughputScope&) = delete;
27
28  ~HighAllocationThroughputScope() { observer_->EnterSection(); }
29
30 private:
31  HighAllocationThroughputObserver* observer_;
32};
33
34}  // namespace internal
35}  // namespace v8
36
37#endif  // V8_COMMON_HIGH_ALLOCATION_THROUGHPUT_SCOPE_H_
38