Index: src/profile-generator.h |
diff --git a/src/profile-generator.h b/src/profile-generator.h |
index c3843bf913df36df11d8ad66513e9f46c716523e..a16ea66f710dd75124dd90a08ed46f8f066c74ed 100644 |
--- a/src/profile-generator.h |
+++ b/src/profile-generator.h |
@@ -36,50 +36,22 @@ namespace internal { |
class CodeEntry { |
public: |
- virtual ~CodeEntry() { } |
+ // CodeEntry doesn't own name strings, just references them. |
+ INLINE(CodeEntry(Logger::LogEventsAndTags tag_, |
+ const char* name_, |
+ const char* resource_name_, |
+ int line_number_)); |
- virtual const char* name() = 0; |
INLINE(bool is_js_function()); |
- |
- protected: |
- INLINE(explicit CodeEntry(Logger::LogEventsAndTags tag)) |
- : tag_(tag) { } |
+ INLINE(const char* name()) { return name_; } |
private: |
Logger::LogEventsAndTags tag_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CodeEntry); |
-}; |
- |
- |
-class StaticNameCodeEntry : public CodeEntry { |
- public: |
- INLINE(StaticNameCodeEntry(Logger::LogEventsAndTags tag, |
- const char* name)); |
- |
- INLINE(virtual const char* name()) { return name_ != NULL ? name_ : ""; } |
- |
- private: |
const char* name_; |
- |
- DISALLOW_COPY_AND_ASSIGN(StaticNameCodeEntry); |
-}; |
- |
- |
-class ManagedNameCodeEntry : public CodeEntry { |
- public: |
- INLINE(ManagedNameCodeEntry(Logger::LogEventsAndTags tag, |
- String* name, |
- const char* resource_name, int line_number)); |
- |
- INLINE(virtual const char* name()) { return !name_.is_empty() ? *name_ : ""; } |
- |
- private: |
- SmartPointer<char> name_; |
const char* resource_name_; |
int line_number_; |
- DISALLOW_COPY_AND_ASSIGN(ManagedNameCodeEntry); |
+ DISALLOW_COPY_AND_ASSIGN(CodeEntry); |
}; |
@@ -92,17 +64,18 @@ class ProfileNode { |
INLINE(void IncrementSelfTicks()) { ++self_ticks_; } |
INLINE(void IncreaseTotalTicks(unsigned amount)) { total_ticks_ += amount; } |
+ INLINE(CodeEntry* entry()) { return entry_; } |
INLINE(unsigned total_ticks()) { return total_ticks_; } |
INLINE(unsigned self_ticks()) { return self_ticks_; } |
void Print(int indent); |
private: |
- INLINE(static bool CodeEntriesMatch(void* key1, void* key2)) { |
- return key1 == key2; |
+ INLINE(static bool CodeEntriesMatch(void* entry1, void* entry2)) { |
+ return entry1 == entry2; |
} |
- INLINE(static bool CodeEntryHash(CodeEntry* entry)) { |
+ INLINE(static uint32_t CodeEntryHash(CodeEntry* entry)) { |
return static_cast<int32_t>(reinterpret_cast<intptr_t>(entry)); |
} |
@@ -144,13 +117,16 @@ class ProfileTree BASE_EMBEDDED { |
}; |
-class CpuProfile BASE_EMBEDDED { |
+class CpuProfile { |
public: |
CpuProfile() { } |
// Add pc -> ... -> main() call path to the profile. |
void AddPath(const Vector<CodeEntry*>& path); |
void CalculateTotalTicks(); |
+ INLINE(ProfileTree* top_down()) { return &top_down_; } |
+ INLINE(ProfileTree* bottom_up()) { return &bottom_up_; } |
+ |
void ShortPrint(); |
void Print(); |
@@ -196,33 +172,70 @@ class CodeMap BASE_EMBEDDED { |
}; |
-class ProfileGenerator { |
+class CpuProfilesCollection { |
public: |
- ProfileGenerator(); |
- ~ProfileGenerator(); |
+ CpuProfilesCollection(); |
+ ~CpuProfilesCollection(); |
+ |
+ void AddProfile(unsigned uid); |
CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, |
String* name, String* resource_name, int line_number); |
CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, const char* name); |
+ CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, int args_count); |
- INLINE(CpuProfile* profile()) { return &profile_; } |
- INLINE(CodeMap* code_map()) { return &code_map_; } |
+ INLINE(CpuProfile* profile()) { return profiles_.last(); } |
private: |
+ const char* GetName(String* name); |
+ const char* GetName(int args_count); |
+ |
INLINE(static bool StringsMatch(void* key1, void* key2)) { |
- return key1 == key2; |
+ return strcmp(reinterpret_cast<char*>(key1), |
+ reinterpret_cast<char*>(key2)) == 0; |
} |
- INLINE(static bool StringEntryHash(String* entry)) { |
- return entry->Hash(); |
+ // String::Hash -> const char* |
+ HashMap function_and_resource_names_; |
+ // args_count -> char* |
+ List<char*> args_count_names_; |
+ List<CodeEntry*> code_entries_; |
+ List<CpuProfile*> profiles_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CpuProfilesCollection); |
+}; |
+ |
+ |
+class ProfileGenerator { |
+ public: |
+ explicit ProfileGenerator(CpuProfilesCollection* profiles); |
+ |
+ INLINE(CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, |
+ String* name, |
+ String* resource_name, |
+ int line_number)) { |
+ return profiles_->NewCodeEntry(tag, name, resource_name, line_number); |
} |
- CpuProfile profile_; |
+ INLINE(CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, |
+ const char* name)) { |
+ return profiles_->NewCodeEntry(tag, name); |
+ } |
+ |
+ INLINE(CodeEntry* NewCodeEntry(Logger::LogEventsAndTags tag, |
+ int args_count)) { |
+ return profiles_->NewCodeEntry(tag, args_count); |
+ } |
+ |
+ void RecordTickSample(const TickSample& sample); |
+ |
+ INLINE(CodeMap* code_map()) { return &code_map_; } |
+ |
+ private: |
+ INLINE(CpuProfile* profile()) { return profiles_->profile(); } |
+ |
+ CpuProfilesCollection* profiles_; |
CodeMap code_map_; |
- typedef List<CodeEntry*> CodeEntryList; |
- CodeEntryList code_entries_; |
- // String::Hash -> const char* |
- HashMap resource_names_; |
DISALLOW_COPY_AND_ASSIGN(ProfileGenerator); |
}; |