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

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

Issue 1547023: C++ profiler: publish the new API, make compatible with WebKit / Chromium. (Closed)
Patch Set: comments addressed Created 10 years, 8 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/platform-linux.cc ('k') | src/profile-generator.cc » ('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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 const char* name, 43 const char* name,
44 const char* resource_name, 44 const char* resource_name,
45 int line_number)); 45 int line_number));
46 46
47 INLINE(bool is_js_function() const); 47 INLINE(bool is_js_function() const);
48 INLINE(const char* name_prefix() const) { return name_prefix_; } 48 INLINE(const char* name_prefix() const) { return name_prefix_; }
49 INLINE(bool has_name_prefix() const) { return name_prefix_[0] != '\0'; } 49 INLINE(bool has_name_prefix() const) { return name_prefix_[0] != '\0'; }
50 INLINE(const char* name() const) { return name_; } 50 INLINE(const char* name() const) { return name_; }
51 INLINE(const char* resource_name() const) { return resource_name_; } 51 INLINE(const char* resource_name() const) { return resource_name_; }
52 INLINE(int line_number() const) { return line_number_; } 52 INLINE(int line_number() const) { return line_number_; }
53 INLINE(unsigned long call_uid() const) { return call_uid_; }
53 54
54 static const char* kEmptyNamePrefix; 55 static const char* kEmptyNamePrefix;
55 static const int kNoLineNumberInfo;
56 56
57 private: 57 private:
58 const unsigned long call_uid_;
58 Logger::LogEventsAndTags tag_; 59 Logger::LogEventsAndTags tag_;
59 const char* name_prefix_; 60 const char* name_prefix_;
60 const char* name_; 61 const char* name_;
61 const char* resource_name_; 62 const char* resource_name_;
62 int line_number_; 63 int line_number_;
63 64
65 static unsigned long next_call_uid_;
66
64 DISALLOW_COPY_AND_ASSIGN(CodeEntry); 67 DISALLOW_COPY_AND_ASSIGN(CodeEntry);
65 }; 68 };
66 69
67 70
68 class ProfileNode { 71 class ProfileNode {
69 public: 72 public:
70 INLINE(explicit ProfileNode(CodeEntry* entry)); 73 INLINE(explicit ProfileNode(CodeEntry* entry));
71 74
72 ProfileNode* FindChild(CodeEntry* entry); 75 ProfileNode* FindChild(CodeEntry* entry);
73 ProfileNode* FindOrAddChild(CodeEntry* entry); 76 ProfileNode* FindOrAddChild(CodeEntry* entry);
(...skipping 22 matching lines...) Expand all
96 // CodeEntry* -> ProfileNode* 99 // CodeEntry* -> ProfileNode*
97 HashMap children_; 100 HashMap children_;
98 List<ProfileNode*> children_list_; 101 List<ProfileNode*> children_list_;
99 102
100 DISALLOW_COPY_AND_ASSIGN(ProfileNode); 103 DISALLOW_COPY_AND_ASSIGN(ProfileNode);
101 }; 104 };
102 105
103 106
104 class ProfileTree { 107 class ProfileTree {
105 public: 108 public:
106 ProfileTree() : root_(new ProfileNode(NULL)) { } 109 ProfileTree();
107 ~ProfileTree(); 110 ~ProfileTree();
108 111
109 void AddPathFromEnd(const Vector<CodeEntry*>& path); 112 void AddPathFromEnd(const Vector<CodeEntry*>& path);
110 void AddPathFromStart(const Vector<CodeEntry*>& path); 113 void AddPathFromStart(const Vector<CodeEntry*>& path);
111 void CalculateTotalTicks(); 114 void CalculateTotalTicks();
112 115
113 ProfileNode* root() const { return root_; } 116 ProfileNode* root() const { return root_; }
114 117
115 void ShortPrint(); 118 void ShortPrint();
116 void Print() { 119 void Print() {
117 root_->Print(0); 120 root_->Print(0);
118 } 121 }
119 122
120 private: 123 private:
121 template <typename Callback> 124 template <typename Callback>
122 void TraverseBreadthFirstPostOrder(Callback* callback); 125 void TraverseBreadthFirstPostOrder(Callback* callback);
123 126
127 CodeEntry root_entry_;
124 ProfileNode* root_; 128 ProfileNode* root_;
125 129
126 DISALLOW_COPY_AND_ASSIGN(ProfileTree); 130 DISALLOW_COPY_AND_ASSIGN(ProfileTree);
127 }; 131 };
128 132
129 133
130 class CpuProfile { 134 class CpuProfile {
131 public: 135 public:
132 CpuProfile(const char* title, unsigned uid) 136 CpuProfile(const char* title, unsigned uid)
133 : title_(title), uid_(uid) { } 137 : title_(title), uid_(uid) { }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 String* name, String* resource_name, int line_number); 216 String* name, String* resource_name, int line_number);
213 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, const char* name); 217 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, const char* name);
214 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, 218 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag,
215 const char* name_prefix, String* name); 219 const char* name_prefix, String* name);
216 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, int args_count); 220 CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, int args_count);
217 221
218 // Called from profile generator thread. 222 // Called from profile generator thread.
219 void AddPathToCurrentProfiles(const Vector<CodeEntry*>& path); 223 void AddPathToCurrentProfiles(const Vector<CodeEntry*>& path);
220 224
221 private: 225 private:
226 const char* GetFunctionName(String* name);
222 const char* GetName(String* name); 227 const char* GetName(String* name);
223 const char* GetName(int args_count); 228 const char* GetName(int args_count);
224 229
225 INLINE(static bool StringsMatch(void* key1, void* key2)) { 230 INLINE(static bool StringsMatch(void* key1, void* key2)) {
226 return strcmp(reinterpret_cast<char*>(key1), 231 return strcmp(reinterpret_cast<char*>(key1),
227 reinterpret_cast<char*>(key2)) == 0; 232 reinterpret_cast<char*>(key2)) == 0;
228 } 233 }
229 234
230 INLINE(static bool CpuProfilesMatch(void* key1, void* key2)) { 235 INLINE(static bool CpuProfilesMatch(void* key1, void* key2)) {
231 return key1 == key2; 236 return key1 == key2;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 return profiles_->NewCodeEntry(tag, args_count); 280 return profiles_->NewCodeEntry(tag, args_count);
276 } 281 }
277 282
278 void RecordTickSample(const TickSample& sample); 283 void RecordTickSample(const TickSample& sample);
279 284
280 INLINE(CodeMap* code_map()) { return &code_map_; } 285 INLINE(CodeMap* code_map()) { return &code_map_; }
281 286
282 private: 287 private:
283 CpuProfilesCollection* profiles_; 288 CpuProfilesCollection* profiles_;
284 CodeMap code_map_; 289 CodeMap code_map_;
290 CodeEntry* program_entry_;
285 291
286 DISALLOW_COPY_AND_ASSIGN(ProfileGenerator); 292 DISALLOW_COPY_AND_ASSIGN(ProfileGenerator);
287 }; 293 };
288 294
289 } } // namespace v8::internal 295 } } // namespace v8::internal
290 296
291 #endif // ENABLE_CPP_PROFILES_PROCESSOR 297 #endif // ENABLE_CPP_PROFILES_PROCESSOR
292 298
293 #endif // V8_PROFILE_GENERATOR_H_ 299 #endif // V8_PROFILE_GENERATOR_H_
OLDNEW
« no previous file with comments | « src/platform-linux.cc ('k') | src/profile-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698