Commit a31320f5 authored by Alexei Filippov's avatar Alexei Filippov Committed by Commit Bot

[profiler] Refactoring: decouple StringsStorage from Heap object.

Change-Id: I450efa4916bd774265991f987f4be618ba2eb1d2
Reviewed-on: https://chromium-review.googlesource.com/1045168
Commit-Queue: Alexei Filippov <alph@chromium.org>
Reviewed-by: 's avatarAleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53005}
parent 8ec48b21
...@@ -16,14 +16,14 @@ namespace internal { ...@@ -16,14 +16,14 @@ namespace internal {
HeapProfiler::HeapProfiler(Heap* heap) HeapProfiler::HeapProfiler(Heap* heap)
: ids_(new HeapObjectsMap(heap)), : ids_(new HeapObjectsMap(heap)),
names_(new StringsStorage(heap)), names_(new StringsStorage(heap->HashSeed())),
is_tracking_object_moves_(false) {} is_tracking_object_moves_(false) {}
HeapProfiler::~HeapProfiler() = default; HeapProfiler::~HeapProfiler() = default;
void HeapProfiler::DeleteAllSnapshots() { void HeapProfiler::DeleteAllSnapshots() {
snapshots_.clear(); snapshots_.clear();
names_.reset(new StringsStorage(heap())); names_.reset(new StringsStorage(heap()->HashSeed()));
} }
......
...@@ -515,7 +515,7 @@ void CodeMap::Print() { ...@@ -515,7 +515,7 @@ void CodeMap::Print() {
} }
CpuProfilesCollection::CpuProfilesCollection(Isolate* isolate) CpuProfilesCollection::CpuProfilesCollection(Isolate* isolate)
: resource_names_(isolate->heap()), : resource_names_(isolate->heap()->HashSeed()),
profiler_(nullptr), profiler_(nullptr),
current_profiles_semaphore_(1) {} current_profiles_semaphore_(1) {}
......
...@@ -17,7 +17,8 @@ namespace internal { ...@@ -17,7 +17,8 @@ namespace internal {
ProfilerListener::ProfilerListener(Isolate* isolate, ProfilerListener::ProfilerListener(Isolate* isolate,
CodeEventObserver* observer) CodeEventObserver* observer)
: observer_(observer), function_and_resource_names_(isolate->heap()) {} : observer_(observer),
function_and_resource_names_(isolate->heap()->HashSeed()) {}
ProfilerListener::~ProfilerListener() = default; ProfilerListener::~ProfilerListener() = default;
......
...@@ -6,21 +6,19 @@ ...@@ -6,21 +6,19 @@
#include <memory> #include <memory>
#include "src/allocation.h"
#include "src/objects-inl.h" #include "src/objects-inl.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
bool StringsStorage::StringsMatch(void* key1, void* key2) { bool StringsStorage::StringsMatch(void* key1, void* key2) {
return strcmp(reinterpret_cast<char*>(key1), reinterpret_cast<char*>(key2)) == return strcmp(reinterpret_cast<char*>(key1), reinterpret_cast<char*>(key2)) ==
0; 0;
} }
StringsStorage::StringsStorage(uint32_t hash_seed)
StringsStorage::StringsStorage(Heap* heap) : hash_seed_(hash_seed), names_(StringsMatch) {}
: hash_seed_(heap->HashSeed()), names_(StringsMatch) {}
StringsStorage::~StringsStorage() { StringsStorage::~StringsStorage() {
for (base::HashMap::Entry* p = names_.Start(); p != nullptr; for (base::HashMap::Entry* p = names_.Start(); p != nullptr;
...@@ -29,7 +27,6 @@ StringsStorage::~StringsStorage() { ...@@ -29,7 +27,6 @@ StringsStorage::~StringsStorage() {
} }
} }
const char* StringsStorage::GetCopy(const char* src) { const char* StringsStorage::GetCopy(const char* src) {
int len = static_cast<int>(strlen(src)); int len = static_cast<int>(strlen(src));
base::HashMap::Entry* entry = GetEntry(src, len); base::HashMap::Entry* entry = GetEntry(src, len);
...@@ -43,7 +40,6 @@ const char* StringsStorage::GetCopy(const char* src) { ...@@ -43,7 +40,6 @@ const char* StringsStorage::GetCopy(const char* src) {
return reinterpret_cast<const char*>(entry->value); return reinterpret_cast<const char*>(entry->value);
} }
const char* StringsStorage::GetFormatted(const char* format, ...) { const char* StringsStorage::GetFormatted(const char* format, ...) {
va_list args; va_list args;
va_start(args, format); va_start(args, format);
...@@ -52,7 +48,6 @@ const char* StringsStorage::GetFormatted(const char* format, ...) { ...@@ -52,7 +48,6 @@ const char* StringsStorage::GetFormatted(const char* format, ...) {
return result; return result;
} }
const char* StringsStorage::AddOrDisposeString(char* str, int len) { const char* StringsStorage::AddOrDisposeString(char* str, int len) {
base::HashMap::Entry* entry = GetEntry(str, len); base::HashMap::Entry* entry = GetEntry(str, len);
if (entry->value == nullptr) { if (entry->value == nullptr) {
...@@ -65,7 +60,6 @@ const char* StringsStorage::AddOrDisposeString(char* str, int len) { ...@@ -65,7 +60,6 @@ const char* StringsStorage::AddOrDisposeString(char* str, int len) {
return reinterpret_cast<const char*>(entry->value); return reinterpret_cast<const char*>(entry->value);
} }
const char* StringsStorage::GetVFormatted(const char* format, va_list args) { const char* StringsStorage::GetVFormatted(const char* format, va_list args) {
Vector<char> str = Vector<char>::New(1024); Vector<char> str = Vector<char>::New(1024);
int len = VSNPrintF(str, format, args); int len = VSNPrintF(str, format, args);
...@@ -76,7 +70,6 @@ const char* StringsStorage::GetVFormatted(const char* format, va_list args) { ...@@ -76,7 +70,6 @@ const char* StringsStorage::GetVFormatted(const char* format, va_list args) {
return AddOrDisposeString(str.start(), len); return AddOrDisposeString(str.start(), len);
} }
const char* StringsStorage::GetName(Name* name) { const char* StringsStorage::GetName(Name* name) {
if (name->IsString()) { if (name->IsString()) {
String* str = String::cast(name); String* str = String::cast(name);
......
...@@ -7,18 +7,19 @@ ...@@ -7,18 +7,19 @@
#include <stdarg.h> #include <stdarg.h>
#include "src/allocation.h"
#include "src/base/compiler-specific.h" #include "src/base/compiler-specific.h"
#include "src/base/hashmap.h" #include "src/base/hashmap.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
class Name;
// Provides a storage of strings allocated in C++ heap, to hold them // Provides a storage of strings allocated in C++ heap, to hold them
// forever, even if they disappear from JS heap or external storage. // forever, even if they disappear from JS heap or external storage.
class StringsStorage { class StringsStorage {
public: public:
explicit StringsStorage(Heap* heap); explicit StringsStorage(uint32_t hash_seed);
~StringsStorage(); ~StringsStorage();
const char* GetCopy(const char* src); const char* GetCopy(const char* src);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment