// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gin/v8_shared_memory_dump_provider.h"

#include <string>

#include "base/memory/singleton.h"
#include "base/trace_event/memory_dump_manager.h"
#include "base/trace_event/process_memory_dump.h"
#include "v8/include/v8-initialization.h"
#include "v8/include/v8-isolate.h"

namespace gin {

V8SharedMemoryDumpProvider::V8SharedMemoryDumpProvider() {
  base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
      this, "V8SharedMemory", nullptr);
}

// static
void V8SharedMemoryDumpProvider::Register() {
  // The provider is registered as part of the constructor, so all this does is
  // access the singleton causing it to be constructed on the first access.
  base::Singleton<
      V8SharedMemoryDumpProvider,
      base::LeakySingletonTraits<V8SharedMemoryDumpProvider>>::get();
}

// Called at trace dump point time. Creates a snapshot with the memory counters
// for the current isolate.
bool V8SharedMemoryDumpProvider::OnMemoryDump(
    const base::trace_event::MemoryDumpArgs& args,
    base::trace_event::ProcessMemoryDump* process_memory_dump) {
  v8::SharedMemoryStatistics shared_memory_statistics;
  v8::V8::GetSharedMemoryStatistics(&shared_memory_statistics);

  std::string dump_base_name = "v8/shared";
  auto* shared_memory_dump = process_memory_dump->CreateAllocatorDump(
      dump_base_name + "/read_only_space");
  shared_memory_dump->AddScalar(
      base::trace_event::MemoryAllocatorDump::kNameSize,
      base::trace_event::MemoryAllocatorDump::kUnitsBytes,
      shared_memory_statistics.read_only_space_physical_size());
  shared_memory_dump->AddScalar(
      "allocated_objects_size",
      base::trace_event::MemoryAllocatorDump::kUnitsBytes,
      shared_memory_statistics.read_only_space_used_size());
  shared_memory_dump->AddScalar(
      "virtual_size", base::trace_event::MemoryAllocatorDump::kUnitsBytes,
      shared_memory_statistics.read_only_space_size());

  return true;
}

}  // namespace gin
