OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #ifndef V8_PROFILER_PROFILE_GENERATOR_H_ | 5 #ifndef V8_PROFILER_PROFILE_GENERATOR_H_ |
6 #define V8_PROFILER_PROFILE_GENERATOR_H_ | 6 #define V8_PROFILER_PROFILE_GENERATOR_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include "include/v8-profiler.h" | 9 #include "include/v8-profiler.h" |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 | 221 |
222 unsigned next_function_id_; | 222 unsigned next_function_id_; |
223 base::HashMap function_ids_; | 223 base::HashMap function_ids_; |
224 | 224 |
225 DISALLOW_COPY_AND_ASSIGN(ProfileTree); | 225 DISALLOW_COPY_AND_ASSIGN(ProfileTree); |
226 }; | 226 }; |
227 | 227 |
228 | 228 |
229 class CpuProfile { | 229 class CpuProfile { |
230 public: | 230 public: |
231 CpuProfile(Isolate* isolate, const char* title, bool record_samples); | 231 CpuProfile(CpuProfiler* profiler, const char* title, bool record_samples); |
232 | 232 |
233 // Add pc -> ... -> main() call path to the profile. | 233 // Add pc -> ... -> main() call path to the profile. |
234 void AddPath(base::TimeTicks timestamp, const std::vector<CodeEntry*>& path, | 234 void AddPath(base::TimeTicks timestamp, const std::vector<CodeEntry*>& path, |
235 int src_line, bool update_stats); | 235 int src_line, bool update_stats); |
236 void CalculateTotalTicksAndSamplingRate(); | 236 void CalculateTotalTicksAndSamplingRate(); |
237 | 237 |
238 const char* title() const { return title_; } | 238 const char* title() const { return title_; } |
239 const ProfileTree* top_down() const { return &top_down_; } | 239 const ProfileTree* top_down() const { return &top_down_; } |
240 | 240 |
241 int samples_count() const { return samples_.length(); } | 241 int samples_count() const { return samples_.length(); } |
242 ProfileNode* sample(int index) const { return samples_.at(index); } | 242 ProfileNode* sample(int index) const { return samples_.at(index); } |
243 base::TimeTicks sample_timestamp(int index) const { | 243 base::TimeTicks sample_timestamp(int index) const { |
244 return timestamps_.at(index); | 244 return timestamps_.at(index); |
245 } | 245 } |
246 | 246 |
247 base::TimeTicks start_time() const { return start_time_; } | 247 base::TimeTicks start_time() const { return start_time_; } |
248 base::TimeTicks end_time() const { return end_time_; } | 248 base::TimeTicks end_time() const { return end_time_; } |
| 249 CpuProfiler* cpu_profiler() const { return profiler_; } |
249 | 250 |
250 void UpdateTicksScale(); | 251 void UpdateTicksScale(); |
251 | 252 |
252 void Print(); | 253 void Print(); |
253 | 254 |
254 private: | 255 private: |
255 const char* title_; | 256 const char* title_; |
256 bool record_samples_; | 257 bool record_samples_; |
257 base::TimeTicks start_time_; | 258 base::TimeTicks start_time_; |
258 base::TimeTicks end_time_; | 259 base::TimeTicks end_time_; |
259 List<ProfileNode*> samples_; | 260 List<ProfileNode*> samples_; |
260 List<base::TimeTicks> timestamps_; | 261 List<base::TimeTicks> timestamps_; |
261 ProfileTree top_down_; | 262 ProfileTree top_down_; |
| 263 CpuProfiler* const profiler_; |
262 | 264 |
263 DISALLOW_COPY_AND_ASSIGN(CpuProfile); | 265 DISALLOW_COPY_AND_ASSIGN(CpuProfile); |
264 }; | 266 }; |
265 | 267 |
266 class CodeMap { | 268 class CodeMap { |
267 public: | 269 public: |
268 CodeMap() {} | 270 CodeMap() {} |
269 | 271 |
270 void AddCode(Address addr, CodeEntry* entry, unsigned size); | 272 void AddCode(Address addr, CodeEntry* entry, unsigned size); |
271 void MoveCode(Address from, Address to); | 273 void MoveCode(Address from, Address to); |
(...skipping 10 matching lines...) Expand all Loading... |
282 | 284 |
283 void DeleteAllCoveredCode(Address start, Address end); | 285 void DeleteAllCoveredCode(Address start, Address end); |
284 | 286 |
285 std::map<Address, CodeEntryInfo> code_map_; | 287 std::map<Address, CodeEntryInfo> code_map_; |
286 | 288 |
287 DISALLOW_COPY_AND_ASSIGN(CodeMap); | 289 DISALLOW_COPY_AND_ASSIGN(CodeMap); |
288 }; | 290 }; |
289 | 291 |
290 class CpuProfilesCollection { | 292 class CpuProfilesCollection { |
291 public: | 293 public: |
292 explicit CpuProfilesCollection(Heap* heap); | 294 explicit CpuProfilesCollection(Isolate* isolate); |
293 ~CpuProfilesCollection(); | 295 ~CpuProfilesCollection(); |
294 | 296 |
| 297 void set_cpu_profiler(CpuProfiler* profiler) { profiler_ = profiler; } |
295 bool StartProfiling(const char* title, bool record_samples); | 298 bool StartProfiling(const char* title, bool record_samples); |
296 CpuProfile* StopProfiling(const char* title); | 299 CpuProfile* StopProfiling(const char* title); |
297 List<CpuProfile*>* profiles() { return &finished_profiles_; } | 300 List<CpuProfile*>* profiles() { return &finished_profiles_; } |
298 const char* GetName(Name* name) { | 301 const char* GetName(Name* name) { |
299 return function_and_resource_names_.GetName(name); | 302 return function_and_resource_names_.GetName(name); |
300 } | 303 } |
301 const char* GetName(int args_count) { | 304 const char* GetName(int args_count) { |
302 return function_and_resource_names_.GetName(args_count); | 305 return function_and_resource_names_.GetName(args_count); |
303 } | 306 } |
304 const char* GetFunctionName(Name* name) { | 307 const char* GetFunctionName(Name* name) { |
(...skipping 18 matching lines...) Expand all Loading... |
323 const std::vector<CodeEntry*>& path, | 326 const std::vector<CodeEntry*>& path, |
324 int src_line, bool update_stats); | 327 int src_line, bool update_stats); |
325 | 328 |
326 // Limits the number of profiles that can be simultaneously collected. | 329 // Limits the number of profiles that can be simultaneously collected. |
327 static const int kMaxSimultaneousProfiles = 100; | 330 static const int kMaxSimultaneousProfiles = 100; |
328 | 331 |
329 private: | 332 private: |
330 StringsStorage function_and_resource_names_; | 333 StringsStorage function_and_resource_names_; |
331 List<CodeEntry*> code_entries_; | 334 List<CodeEntry*> code_entries_; |
332 List<CpuProfile*> finished_profiles_; | 335 List<CpuProfile*> finished_profiles_; |
333 | 336 CpuProfiler* profiler_; |
334 Isolate* isolate_; | |
335 | 337 |
336 // Accessed by VM thread and profile generator thread. | 338 // Accessed by VM thread and profile generator thread. |
337 List<CpuProfile*> current_profiles_; | 339 List<CpuProfile*> current_profiles_; |
338 base::Semaphore current_profiles_semaphore_; | 340 base::Semaphore current_profiles_semaphore_; |
339 | 341 |
340 DISALLOW_COPY_AND_ASSIGN(CpuProfilesCollection); | 342 DISALLOW_COPY_AND_ASSIGN(CpuProfilesCollection); |
341 }; | 343 }; |
342 | 344 |
343 | 345 |
344 class ProfileGenerator { | 346 class ProfileGenerator { |
(...skipping 22 matching lines...) Expand all Loading... |
367 CodeEntry* unresolved_entry_; | 369 CodeEntry* unresolved_entry_; |
368 | 370 |
369 DISALLOW_COPY_AND_ASSIGN(ProfileGenerator); | 371 DISALLOW_COPY_AND_ASSIGN(ProfileGenerator); |
370 }; | 372 }; |
371 | 373 |
372 | 374 |
373 } // namespace internal | 375 } // namespace internal |
374 } // namespace v8 | 376 } // namespace v8 |
375 | 377 |
376 #endif // V8_PROFILER_PROFILE_GENERATOR_H_ | 378 #endif // V8_PROFILER_PROFILE_GENERATOR_H_ |
OLD | NEW |