Coverage Report

Created: 2026-03-31 07:51

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/rocksdb/memtable/alloc_tracker.cc
Line
Count
Source
1
//  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2
//  This source code is licensed under both the GPLv2 (found in the
3
//  COPYING file in the root directory) and Apache 2.0 License
4
//  (found in the LICENSE.Apache file in the root directory).
5
//
6
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7
// Use of this source code is governed by a BSD-style license that can be
8
// found in the LICENSE file. See the AUTHORS file for names of contributors.
9
10
#include <cassert>
11
12
#include "memory/allocator.h"
13
#include "memory/arena.h"
14
#include "rocksdb/write_buffer_manager.h"
15
16
namespace ROCKSDB_NAMESPACE {
17
18
AllocTracker::AllocTracker(WriteBufferManager* write_buffer_manager)
19
95.9k
    : write_buffer_manager_(write_buffer_manager),
20
95.9k
      bytes_allocated_(0),
21
95.9k
      done_allocating_(false),
22
95.9k
      freed_(false) {}
23
24
95.9k
AllocTracker::~AllocTracker() { FreeMem(); }
25
26
0
void AllocTracker::Allocate(size_t bytes) {
27
0
  assert(write_buffer_manager_ != nullptr);
28
0
  if (write_buffer_manager_->enabled() ||
29
0
      write_buffer_manager_->cost_to_cache()) {
30
0
    bytes_allocated_.fetch_add(bytes, std::memory_order_relaxed);
31
0
    write_buffer_manager_->ReserveMem(bytes);
32
0
  }
33
0
}
34
35
95.9k
void AllocTracker::DoneAllocating() {
36
95.9k
  if (write_buffer_manager_ != nullptr && !done_allocating_) {
37
95.9k
    if (write_buffer_manager_->enabled() ||
38
95.9k
        write_buffer_manager_->cost_to_cache()) {
39
0
      write_buffer_manager_->ScheduleFreeMem(
40
0
          bytes_allocated_.load(std::memory_order_relaxed));
41
95.9k
    } else {
42
95.9k
      assert(bytes_allocated_.load(std::memory_order_relaxed) == 0);
43
95.9k
    }
44
95.9k
    done_allocating_ = true;
45
95.9k
  }
46
95.9k
}
47
48
191k
void AllocTracker::FreeMem() {
49
191k
  if (!done_allocating_) {
50
94.2k
    DoneAllocating();
51
94.2k
  }
52
191k
  if (write_buffer_manager_ != nullptr && !freed_) {
53
95.9k
    if (write_buffer_manager_->enabled() ||
54
95.9k
        write_buffer_manager_->cost_to_cache()) {
55
0
      write_buffer_manager_->FreeMem(
56
0
          bytes_allocated_.load(std::memory_order_relaxed));
57
95.9k
    } else {
58
      assert(bytes_allocated_.load(std::memory_order_relaxed) == 0);
59
95.9k
    }
60
95.9k
    freed_ = true;
61
95.9k
  }
62
191k
}
63
}  // namespace ROCKSDB_NAMESPACE