| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.//  This source code is licensed under both the GPLv2 (found in the//  COPYING file in the root directory) and Apache 2.0 License//  (found in the LICENSE.Apache file in the root directory).//// Copyright (c) 2011 The LevelDB Authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file. See the AUTHORS file for names of contributors.#include "db/malloc_stats.h"#ifndef ROCKSDB_LITE#include <memory>#include <string.h>#include "port/jemalloc_helper.h"namespace ROCKSDB_NAMESPACE {#ifdef ROCKSDB_JEMALLOCtypedef struct {  char* cur;  char* end;} MallocStatus;static void GetJemallocStatus(void* mstat_arg, const char* status) {  MallocStatus* mstat = reinterpret_cast<MallocStatus*>(mstat_arg);  size_t status_len = status ? strlen(status) : 0;  size_t buf_size = (size_t)(mstat->end - mstat->cur);  if (!status_len || status_len > buf_size) {    return;  }  snprintf(mstat->cur, buf_size, "%s", status);  mstat->cur += status_len;}void DumpMallocStats(std::string* stats) {  if (!HasJemalloc()) {    return;  }  MallocStatus mstat;  const unsigned int kMallocStatusLen = 1000000;  std::unique_ptr<char[]> buf{new char[kMallocStatusLen + 1]};  mstat.cur = buf.get();  mstat.end = buf.get() + kMallocStatusLen;  malloc_stats_print(GetJemallocStatus, &mstat, "");  stats->append(buf.get());}#elsevoid DumpMallocStats(std::string*) {}#endif  // ROCKSDB_JEMALLOC}  // namespace ROCKSDB_NAMESPACE#endif  // !ROCKSDB_LITE
 |