blob: 7164caef637055072f60d7af7f711ca1f539c64c [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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_PROFILER_STRINGS_STORAGE_H_
6#define V8_PROFILER_STRINGS_STORAGE_H_
7
8#include "src/allocation.h"
9#include "src/hashmap.h"
10
11namespace v8 {
12namespace internal {
13
14// Provides a storage of strings allocated in C++ heap, to hold them
15// forever, even if they disappear from JS heap or external storage.
16class StringsStorage {
17 public:
18 explicit StringsStorage(Heap* heap);
19 ~StringsStorage();
20
21 const char* GetCopy(const char* src);
22 const char* GetFormatted(const char* format, ...);
23 const char* GetVFormatted(const char* format, va_list args);
24 const char* GetName(Name* name);
25 const char* GetName(int index);
26 const char* GetFunctionName(Name* name);
27 const char* GetFunctionName(const char* name);
28 size_t GetUsedMemorySize() const;
29
30 private:
31 static const int kMaxNameSize = 1024;
32
33 static bool StringsMatch(void* key1, void* key2);
34 const char* AddOrDisposeString(char* str, int len);
35 HashMap::Entry* GetEntry(const char* str, int len);
36
37 uint32_t hash_seed_;
38 HashMap names_;
39
40 DISALLOW_COPY_AND_ASSIGN(StringsStorage);
41};
42} // namespace internal
43} // namespace v8
44
45#endif // V8_PROFILER_STRINGS_STORAGE_H_