Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: src/profile-generator.cc

Issue 945873002: CpuProfiler: move StringsStorage class to separate source and header files. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/profile-generator.h ('k') | src/strings-storage.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/profile-generator-inl.h" 7 #include "src/profile-generator-inl.h"
8 8
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
11 #include "src/deoptimizer.h" 11 #include "src/deoptimizer.h"
12 #include "src/global-handles.h" 12 #include "src/global-handles.h"
13 #include "src/sampler.h" 13 #include "src/sampler.h"
14 #include "src/scopeinfo.h" 14 #include "src/scopeinfo.h"
15 #include "src/unicode.h" 15 #include "src/unicode.h"
16 16
17 namespace v8 { 17 namespace v8 {
18 namespace internal { 18 namespace internal {
19 19
20 20
21 bool StringsStorage::StringsMatch(void* key1, void* key2) {
22 return strcmp(reinterpret_cast<char*>(key1),
23 reinterpret_cast<char*>(key2)) == 0;
24 }
25
26
27 StringsStorage::StringsStorage(Heap* heap)
28 : hash_seed_(heap->HashSeed()), names_(StringsMatch) {
29 }
30
31
32 StringsStorage::~StringsStorage() {
33 for (HashMap::Entry* p = names_.Start();
34 p != NULL;
35 p = names_.Next(p)) {
36 DeleteArray(reinterpret_cast<const char*>(p->value));
37 }
38 }
39
40
41 const char* StringsStorage::GetCopy(const char* src) {
42 int len = static_cast<int>(strlen(src));
43 HashMap::Entry* entry = GetEntry(src, len);
44 if (entry->value == NULL) {
45 Vector<char> dst = Vector<char>::New(len + 1);
46 StrNCpy(dst, src, len);
47 dst[len] = '\0';
48 entry->key = dst.start();
49 entry->value = entry->key;
50 }
51 return reinterpret_cast<const char*>(entry->value);
52 }
53
54
55 const char* StringsStorage::GetFormatted(const char* format, ...) {
56 va_list args;
57 va_start(args, format);
58 const char* result = GetVFormatted(format, args);
59 va_end(args);
60 return result;
61 }
62
63
64 const char* StringsStorage::AddOrDisposeString(char* str, int len) {
65 HashMap::Entry* entry = GetEntry(str, len);
66 if (entry->value == NULL) {
67 // New entry added.
68 entry->key = str;
69 entry->value = str;
70 } else {
71 DeleteArray(str);
72 }
73 return reinterpret_cast<const char*>(entry->value);
74 }
75
76
77 const char* StringsStorage::GetVFormatted(const char* format, va_list args) {
78 Vector<char> str = Vector<char>::New(1024);
79 int len = VSNPrintF(str, format, args);
80 if (len == -1) {
81 DeleteArray(str.start());
82 return GetCopy(format);
83 }
84 return AddOrDisposeString(str.start(), len);
85 }
86
87
88 const char* StringsStorage::GetName(Name* name) {
89 if (name->IsString()) {
90 String* str = String::cast(name);
91 int length = Min(kMaxNameSize, str->length());
92 int actual_length = 0;
93 SmartArrayPointer<char> data =
94 str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL, 0, length,
95 &actual_length);
96 return AddOrDisposeString(data.Detach(), actual_length);
97 } else if (name->IsSymbol()) {
98 return "<symbol>";
99 }
100 return "";
101 }
102
103
104 const char* StringsStorage::GetName(int index) {
105 return GetFormatted("%d", index);
106 }
107
108
109 const char* StringsStorage::GetFunctionName(Name* name) {
110 return GetName(name);
111 }
112
113
114 const char* StringsStorage::GetFunctionName(const char* name) {
115 return GetCopy(name);
116 }
117
118
119 size_t StringsStorage::GetUsedMemorySize() const {
120 size_t size = sizeof(*this);
121 size += sizeof(HashMap::Entry) * names_.capacity();
122 for (HashMap::Entry* p = names_.Start(); p != NULL; p = names_.Next(p)) {
123 size += strlen(reinterpret_cast<const char*>(p->value)) + 1;
124 }
125 return size;
126 }
127
128
129 HashMap::Entry* StringsStorage::GetEntry(const char* str, int len) {
130 uint32_t hash = StringHasher::HashSequentialString(str, len, hash_seed_);
131 return names_.Lookup(const_cast<char*>(str), hash, true);
132 }
133
134
135 JITLineInfoTable::JITLineInfoTable() {} 21 JITLineInfoTable::JITLineInfoTable() {}
136 22
137 23
138 JITLineInfoTable::~JITLineInfoTable() {} 24 JITLineInfoTable::~JITLineInfoTable() {}
139 25
140 26
141 void JITLineInfoTable::SetPosition(int pc_offset, int line) { 27 void JITLineInfoTable::SetPosition(int pc_offset, int line) {
142 DCHECK(pc_offset >= 0); 28 DCHECK(pc_offset >= 0);
143 DCHECK(line > 0); // The 1-based number of the source line. 29 DCHECK(line > 0); // The 1-based number of the source line.
144 if (GetSourceLineNumber(pc_offset) != line) { 30 if (GetSourceLineNumber(pc_offset) != line) {
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 case OTHER: 650 case OTHER:
765 case EXTERNAL: 651 case EXTERNAL:
766 return program_entry_; 652 return program_entry_;
767 case IDLE: 653 case IDLE:
768 return idle_entry_; 654 return idle_entry_;
769 default: return NULL; 655 default: return NULL;
770 } 656 }
771 } 657 }
772 658
773 } } // namespace v8::internal 659 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/profile-generator.h ('k') | src/strings-storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698