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

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

Issue 2745002: Move token-related constants from CodeEntry to TokenEnumerator. (Closed)
Patch Set: Created 10 years, 6 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') | test/cctest/test-cpu-profiler.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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 for (int i = 0; i < token_locations_.length(); ++i) { 48 for (int i = 0; i < token_locations_.length(); ++i) {
49 if (!token_removed_[i]) { 49 if (!token_removed_[i]) {
50 GlobalHandles::ClearWeakness(token_locations_[i]); 50 GlobalHandles::ClearWeakness(token_locations_[i]);
51 GlobalHandles::Destroy(token_locations_[i]); 51 GlobalHandles::Destroy(token_locations_[i]);
52 } 52 }
53 } 53 }
54 } 54 }
55 55
56 56
57 int TokenEnumerator::GetTokenId(Object* token) { 57 int TokenEnumerator::GetTokenId(Object* token) {
58 if (token == NULL) return CodeEntry::kNoSecurityToken; 58 if (token == NULL) return TokenEnumerator::kNoSecurityToken;
59 for (int i = 0; i < token_locations_.length(); ++i) { 59 for (int i = 0; i < token_locations_.length(); ++i) {
60 if (*token_locations_[i] == token && !token_removed_[i]) return i; 60 if (*token_locations_[i] == token && !token_removed_[i]) return i;
61 } 61 }
62 Handle<Object> handle = GlobalHandles::Create(token); 62 Handle<Object> handle = GlobalHandles::Create(token);
63 // handle.location() points to a memory cell holding a pointer 63 // handle.location() points to a memory cell holding a pointer
64 // to a token object in the V8's heap. 64 // to a token object in the V8's heap.
65 GlobalHandles::MakeWeak(handle.location(), this, TokenRemovedCallback); 65 GlobalHandles::MakeWeak(handle.location(), this, TokenRemovedCallback);
66 token_locations_.Add(handle.location()); 66 token_locations_.Add(handle.location());
67 token_removed_.Add(false); 67 token_removed_.Add(false);
68 return token_locations_.length() - 1; 68 return token_locations_.length() - 1;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 164
165 } // namespace 165 } // namespace
166 166
167 167
168 ProfileTree::ProfileTree() 168 ProfileTree::ProfileTree()
169 : root_entry_(Logger::FUNCTION_TAG, 169 : root_entry_(Logger::FUNCTION_TAG,
170 "", 170 "",
171 "(root)", 171 "(root)",
172 "", 172 "",
173 0, 173 0,
174 CodeEntry::kNoSecurityToken), 174 TokenEnumerator::kNoSecurityToken),
175 root_(new ProfileNode(this, &root_entry_)) { 175 root_(new ProfileNode(this, &root_entry_)) {
176 } 176 }
177 177
178 178
179 ProfileTree::~ProfileTree() { 179 ProfileTree::~ProfileTree() {
180 DeleteNodesCallback cb; 180 DeleteNodesCallback cb;
181 TraverseDepthFirst(&cb); 181 TraverseDepthFirst(&cb);
182 } 182 }
183 183
184 184
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 void AfterAllChildrenTraversed(ProfileNode* parent) { } 241 void AfterAllChildrenTraversed(ProfileNode* parent) { }
242 242
243 void AfterChildTraversed(ProfileNode*, ProfileNode* child) { 243 void AfterChildTraversed(ProfileNode*, ProfileNode* child) {
244 if (stack_.last().src == child) { 244 if (stack_.last().src == child) {
245 stack_.RemoveLast(); 245 stack_.RemoveLast();
246 } 246 }
247 } 247 }
248 248
249 private: 249 private:
250 bool IsTokenAcceptable(int token, int parent_token) { 250 bool IsTokenAcceptable(int token, int parent_token) {
251 if (token == CodeEntry::kNoSecurityToken 251 if (token == TokenEnumerator::kNoSecurityToken
252 || token == security_token_id_) return true; 252 || token == security_token_id_) return true;
253 if (token == CodeEntry::kInheritsSecurityToken) { 253 if (token == TokenEnumerator::kInheritsSecurityToken) {
254 ASSERT(parent_token != CodeEntry::kInheritsSecurityToken); 254 ASSERT(parent_token != TokenEnumerator::kInheritsSecurityToken);
255 return parent_token == CodeEntry::kNoSecurityToken 255 return parent_token == TokenEnumerator::kNoSecurityToken
256 || parent_token == security_token_id_; 256 || parent_token == security_token_id_;
257 } 257 }
258 return false; 258 return false;
259 } 259 }
260 260
261 List<NodesPair> stack_; 261 List<NodesPair> stack_;
262 int security_token_id_; 262 int security_token_id_;
263 }; 263 };
264 264
265 } // namespace 265 } // namespace
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 366 }
367 367
368 368
369 void CpuProfile::SetActualSamplingRate(double actual_sampling_rate) { 369 void CpuProfile::SetActualSamplingRate(double actual_sampling_rate) {
370 top_down_.SetTickRatePerMs(actual_sampling_rate); 370 top_down_.SetTickRatePerMs(actual_sampling_rate);
371 bottom_up_.SetTickRatePerMs(actual_sampling_rate); 371 bottom_up_.SetTickRatePerMs(actual_sampling_rate);
372 } 372 }
373 373
374 374
375 CpuProfile* CpuProfile::FilteredClone(int security_token_id) { 375 CpuProfile* CpuProfile::FilteredClone(int security_token_id) {
376 ASSERT(security_token_id != CodeEntry::kNoSecurityToken); 376 ASSERT(security_token_id != TokenEnumerator::kNoSecurityToken);
377 CpuProfile* clone = new CpuProfile(title_, uid_); 377 CpuProfile* clone = new CpuProfile(title_, uid_);
378 clone->top_down_.FilteredClone(&top_down_, security_token_id); 378 clone->top_down_.FilteredClone(&top_down_, security_token_id);
379 clone->bottom_up_.FilteredClone(&bottom_up_, security_token_id); 379 clone->bottom_up_.FilteredClone(&bottom_up_, security_token_id);
380 return clone; 380 return clone;
381 } 381 }
382 382
383 383
384 void CpuProfile::ShortPrint() { 384 void CpuProfile::ShortPrint() {
385 OS::Print("top down "); 385 OS::Print("top down ");
386 top_down_.ShortPrint(); 386 top_down_.ShortPrint();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 profile = current_profiles_.Remove(i); 510 profile = current_profiles_.Remove(i);
511 break; 511 break;
512 } 512 }
513 } 513 }
514 current_profiles_semaphore_->Signal(); 514 current_profiles_semaphore_->Signal();
515 515
516 if (profile != NULL) { 516 if (profile != NULL) {
517 profile->CalculateTotalTicks(); 517 profile->CalculateTotalTicks();
518 profile->SetActualSamplingRate(actual_sampling_rate); 518 profile->SetActualSamplingRate(actual_sampling_rate);
519 List<CpuProfile*>* unabridged_list = 519 List<CpuProfile*>* unabridged_list =
520 profiles_by_token_[TokenToIndex(CodeEntry::kNoSecurityToken)]; 520 profiles_by_token_[TokenToIndex(TokenEnumerator::kNoSecurityToken)];
521 unabridged_list->Add(profile); 521 unabridged_list->Add(profile);
522 HashMap::Entry* entry = 522 HashMap::Entry* entry =
523 profiles_uids_.Lookup(reinterpret_cast<void*>(profile->uid()), 523 profiles_uids_.Lookup(reinterpret_cast<void*>(profile->uid()),
524 static_cast<uint32_t>(profile->uid()), 524 static_cast<uint32_t>(profile->uid()),
525 true); 525 true);
526 ASSERT(entry->value == NULL); 526 ASSERT(entry->value == NULL);
527 entry->value = reinterpret_cast<void*>(unabridged_list->length() - 1); 527 entry->value = reinterpret_cast<void*>(unabridged_list->length() - 1);
528 return GetProfile(security_token_id, profile->uid()); 528 return GetProfile(security_token_id, profile->uid());
529 } 529 }
530 return NULL; 530 return NULL;
(...skipping 12 matching lines...) Expand all
543 HashMap::Entry* entry = profiles_uids_.Lookup(reinterpret_cast<void*>(uid), 543 HashMap::Entry* entry = profiles_uids_.Lookup(reinterpret_cast<void*>(uid),
544 static_cast<uint32_t>(uid), 544 static_cast<uint32_t>(uid),
545 false); 545 false);
546 int index; 546 int index;
547 if (entry != NULL) { 547 if (entry != NULL) {
548 index = static_cast<int>(reinterpret_cast<intptr_t>(entry->value)); 548 index = static_cast<int>(reinterpret_cast<intptr_t>(entry->value));
549 } else { 549 } else {
550 return NULL; 550 return NULL;
551 } 551 }
552 List<CpuProfile*>* unabridged_list = 552 List<CpuProfile*>* unabridged_list =
553 profiles_by_token_[TokenToIndex(CodeEntry::kNoSecurityToken)]; 553 profiles_by_token_[TokenToIndex(TokenEnumerator::kNoSecurityToken)];
554 if (security_token_id == CodeEntry::kNoSecurityToken) { 554 if (security_token_id == TokenEnumerator::kNoSecurityToken) {
555 return unabridged_list->at(index); 555 return unabridged_list->at(index);
556 } 556 }
557 List<CpuProfile*>* list = GetProfilesList(security_token_id); 557 List<CpuProfile*>* list = GetProfilesList(security_token_id);
558 if (list->at(index) == NULL) { 558 if (list->at(index) == NULL) {
559 list->at(index) = 559 list->at(index) =
560 unabridged_list->at(index)->FilteredClone(security_token_id); 560 unabridged_list->at(index)->FilteredClone(security_token_id);
561 } 561 }
562 return list->at(index); 562 return list->at(index);
563 } 563 }
564 564
565 565
566 int CpuProfilesCollection::TokenToIndex(int security_token_id) { 566 int CpuProfilesCollection::TokenToIndex(int security_token_id) {
567 ASSERT(CodeEntry::kNoSecurityToken == -1); 567 ASSERT(TokenEnumerator::kNoSecurityToken == -1);
568 return security_token_id + 1; // kNoSecurityToken -> 0, 0 -> 1, ... 568 return security_token_id + 1; // kNoSecurityToken -> 0, 0 -> 1, ...
569 } 569 }
570 570
571 571
572 List<CpuProfile*>* CpuProfilesCollection::GetProfilesList( 572 List<CpuProfile*>* CpuProfilesCollection::GetProfilesList(
573 int security_token_id) { 573 int security_token_id) {
574 const int index = TokenToIndex(security_token_id); 574 const int index = TokenToIndex(security_token_id);
575 const int lists_to_add = index - profiles_by_token_.length() + 1; 575 const int lists_to_add = index - profiles_by_token_.length() + 1;
576 if (lists_to_add > 0) profiles_by_token_.AddBlock(NULL, lists_to_add); 576 if (lists_to_add > 0) profiles_by_token_.AddBlock(NULL, lists_to_add);
577 List<CpuProfile*>* unabridged_list = 577 List<CpuProfile*>* unabridged_list =
578 profiles_by_token_[TokenToIndex(CodeEntry::kNoSecurityToken)]; 578 profiles_by_token_[TokenToIndex(TokenEnumerator::kNoSecurityToken)];
579 const int current_count = unabridged_list->length(); 579 const int current_count = unabridged_list->length();
580 if (profiles_by_token_[index] == NULL) { 580 if (profiles_by_token_[index] == NULL) {
581 profiles_by_token_[index] = new List<CpuProfile*>(current_count); 581 profiles_by_token_[index] = new List<CpuProfile*>(current_count);
582 } 582 }
583 List<CpuProfile*>* list = profiles_by_token_[index]; 583 List<CpuProfile*>* list = profiles_by_token_[index];
584 const int profiles_to_add = current_count - list->length(); 584 const int profiles_to_add = current_count - list->length();
585 if (profiles_to_add > 0) list->AddBlock(NULL, profiles_to_add); 585 if (profiles_to_add > 0) list->AddBlock(NULL, profiles_to_add);
586 return list; 586 return list;
587 } 587 }
588 588
589 589
590 List<CpuProfile*>* CpuProfilesCollection::Profiles(int security_token_id) { 590 List<CpuProfile*>* CpuProfilesCollection::Profiles(int security_token_id) {
591 List<CpuProfile*>* unabridged_list = 591 List<CpuProfile*>* unabridged_list =
592 profiles_by_token_[TokenToIndex(CodeEntry::kNoSecurityToken)]; 592 profiles_by_token_[TokenToIndex(TokenEnumerator::kNoSecurityToken)];
593 if (security_token_id == CodeEntry::kNoSecurityToken) { 593 if (security_token_id == TokenEnumerator::kNoSecurityToken) {
594 return unabridged_list; 594 return unabridged_list;
595 } 595 }
596 List<CpuProfile*>* list = GetProfilesList(security_token_id); 596 List<CpuProfile*>* list = GetProfilesList(security_token_id);
597 const int current_count = unabridged_list->length(); 597 const int current_count = unabridged_list->length();
598 for (int i = 0; i < current_count; ++i) { 598 for (int i = 0; i < current_count; ++i) {
599 if (list->at(i) == NULL) { 599 if (list->at(i) == NULL) {
600 list->at(i) = unabridged_list->at(i)->FilteredClone(security_token_id); 600 list->at(i) = unabridged_list->at(i)->FilteredClone(security_token_id);
601 } 601 }
602 } 602 }
603 return list; 603 return list;
604 } 604 }
605 605
606 606
607 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 607 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
608 String* name, 608 String* name,
609 String* resource_name, 609 String* resource_name,
610 int line_number) { 610 int line_number) {
611 CodeEntry* entry = new CodeEntry(tag, 611 CodeEntry* entry = new CodeEntry(tag,
612 CodeEntry::kEmptyNamePrefix, 612 CodeEntry::kEmptyNamePrefix,
613 GetFunctionName(name), 613 GetFunctionName(name),
614 GetName(resource_name), 614 GetName(resource_name),
615 line_number, 615 line_number,
616 CodeEntry::kNoSecurityToken); 616 TokenEnumerator::kNoSecurityToken);
617 code_entries_.Add(entry); 617 code_entries_.Add(entry);
618 return entry; 618 return entry;
619 } 619 }
620 620
621 621
622 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 622 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
623 const char* name) { 623 const char* name) {
624 CodeEntry* entry = new CodeEntry(tag, 624 CodeEntry* entry = new CodeEntry(tag,
625 CodeEntry::kEmptyNamePrefix, 625 CodeEntry::kEmptyNamePrefix,
626 GetFunctionName(name), 626 GetFunctionName(name),
627 "", 627 "",
628 v8::CpuProfileNode::kNoLineNumberInfo, 628 v8::CpuProfileNode::kNoLineNumberInfo,
629 CodeEntry::kNoSecurityToken); 629 TokenEnumerator::kNoSecurityToken);
630 code_entries_.Add(entry); 630 code_entries_.Add(entry);
631 return entry; 631 return entry;
632 } 632 }
633 633
634 634
635 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 635 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
636 const char* name_prefix, 636 const char* name_prefix,
637 String* name) { 637 String* name) {
638 CodeEntry* entry = new CodeEntry(tag, 638 CodeEntry* entry = new CodeEntry(tag,
639 name_prefix, 639 name_prefix,
640 GetName(name), 640 GetName(name),
641 "", 641 "",
642 v8::CpuProfileNode::kNoLineNumberInfo, 642 v8::CpuProfileNode::kNoLineNumberInfo,
643 CodeEntry::kInheritsSecurityToken); 643 TokenEnumerator::kInheritsSecurityToken);
644 code_entries_.Add(entry); 644 code_entries_.Add(entry);
645 return entry; 645 return entry;
646 } 646 }
647 647
648 648
649 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag, 649 CodeEntry* CpuProfilesCollection::NewCodeEntry(Logger::LogEventsAndTags tag,
650 int args_count) { 650 int args_count) {
651 CodeEntry* entry = new CodeEntry(tag, 651 CodeEntry* entry = new CodeEntry(tag,
652 "args_count: ", 652 "args_count: ",
653 GetName(args_count), 653 GetName(args_count),
654 "", 654 "",
655 v8::CpuProfileNode::kNoLineNumberInfo, 655 v8::CpuProfileNode::kNoLineNumberInfo,
656 CodeEntry::kInheritsSecurityToken); 656 TokenEnumerator::kInheritsSecurityToken);
657 code_entries_.Add(entry); 657 code_entries_.Add(entry);
658 return entry; 658 return entry;
659 } 659 }
660 660
661 661
662 CodeEntry* CpuProfilesCollection::NewCodeEntry(int security_token_id) { 662 CodeEntry* CpuProfilesCollection::NewCodeEntry(int security_token_id) {
663 CodeEntry* entry = new CodeEntry(security_token_id); 663 CodeEntry* entry = new CodeEntry(security_token_id);
664 code_entries_.Add(entry); 664 code_entries_.Add(entry);
665 return entry; 665 return entry;
666 } 666 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 *entry++ = EntryForVMState(sample.state); 803 *entry++ = EntryForVMState(sample.state);
804 } 804 }
805 } 805 }
806 806
807 profiles_->AddPathToCurrentProfiles(entries); 807 profiles_->AddPathToCurrentProfiles(entries);
808 } 808 }
809 809
810 } } // namespace v8::internal 810 } } // namespace v8::internal
811 811
812 #endif // ENABLE_LOGGING_AND_PROFILING 812 #endif // ENABLE_LOGGING_AND_PROFILING
OLDNEW
« no previous file with comments | « src/profile-generator.h ('k') | test/cctest/test-cpu-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698