| Index: runtime/vm/profiler_service.cc
|
| diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
|
| index b198a224f4c516b9b1b4de00408099fe0c376af8..6731e2d91d8f167723070a34cc0871c441943999 100644
|
| --- a/runtime/vm/profiler_service.cc
|
| +++ b/runtime/vm/profiler_service.cc
|
| @@ -29,9 +29,8 @@ class DeoptimizedCodeSet : public ZoneAllocated {
|
| : previous_(
|
| GrowableObjectArray::ZoneHandle(isolate->deoptimized_code_array())),
|
| current_(GrowableObjectArray::ZoneHandle(
|
| - previous_.IsNull() ? GrowableObjectArray::null() :
|
| - GrowableObjectArray::New())) {
|
| - }
|
| + previous_.IsNull() ? GrowableObjectArray::null()
|
| + : GrowableObjectArray::New())) {}
|
|
|
| void Add(const Code& code) {
|
| if (current_.IsNull()) {
|
| @@ -49,9 +48,10 @@ class DeoptimizedCodeSet : public ZoneAllocated {
|
| if ((size_before > 0) && FLAG_trace_profiler) {
|
| intptr_t length_before = previous_.Length();
|
| intptr_t length_after = current_.Length();
|
| - OS::Print("Updating isolate deoptimized code array: "
|
| - "%" Pd " -> %" Pd " [%" Pd " -> %" Pd "]\n",
|
| - size_before, size_after, length_before, length_after);
|
| + OS::Print(
|
| + "Updating isolate deoptimized code array: "
|
| + "%" Pd " -> %" Pd " [%" Pd " -> %" Pd "]\n",
|
| + size_before, size_after, length_before, length_after);
|
| }
|
| isolate->set_deoptimized_code_array(current_);
|
| }
|
| @@ -93,10 +93,7 @@ class DeoptimizedCodeSet : public ZoneAllocated {
|
|
|
| ProfileFunctionSourcePosition::ProfileFunctionSourcePosition(
|
| TokenPosition token_pos)
|
| - : token_pos_(token_pos),
|
| - exclusive_ticks_(0),
|
| - inclusive_ticks_(0) {
|
| -}
|
| + : token_pos_(token_pos), exclusive_ticks_(0), inclusive_ticks_(0) {}
|
|
|
|
|
| void ProfileFunctionSourcePosition::Tick(bool exclusive) {
|
| @@ -109,9 +106,9 @@ void ProfileFunctionSourcePosition::Tick(bool exclusive) {
|
|
|
|
|
| ProfileFunction::ProfileFunction(Kind kind,
|
| - const char* name,
|
| - const Function& function,
|
| - const intptr_t table_index)
|
| + const char* name,
|
| + const Function& function,
|
| + const intptr_t table_index)
|
| : kind_(kind),
|
| name_(name),
|
| function_(Function::ZoneHandle(function.raw())),
|
| @@ -273,10 +270,7 @@ bool ProfileFunction::GetSinglePosition(ProfileFunctionSourcePosition* pfsp) {
|
|
|
|
|
| ProfileCodeAddress::ProfileCodeAddress(uword pc)
|
| - : pc_(pc),
|
| - exclusive_ticks_(0),
|
| - inclusive_ticks_(0) {
|
| -}
|
| + : pc_(pc), exclusive_ticks_(0), inclusive_ticks_(0) {}
|
|
|
|
|
| void ProfileCodeAddress::Tick(bool exclusive) {
|
| @@ -304,8 +298,7 @@ ProfileCode::ProfileCode(Kind kind,
|
| compile_timestamp_(0),
|
| function_(NULL),
|
| code_table_index_(-1),
|
| - address_ticks_(0) {
|
| -}
|
| + address_ticks_(0) {}
|
|
|
|
|
| void ProfileCode::AdjustExtent(uword start, uword end) {
|
| @@ -321,10 +314,8 @@ void ProfileCode::AdjustExtent(uword start, uword end) {
|
|
|
| bool ProfileCode::Overlaps(const ProfileCode* other) const {
|
| ASSERT(other != NULL);
|
| - return other->Contains(start_) ||
|
| - other->Contains(end_ - 1) ||
|
| - Contains(other->start()) ||
|
| - Contains(other->end() - 1);
|
| + return other->Contains(start_) || other->Contains(end_ - 1) ||
|
| + Contains(other->start()) || Contains(other->end() - 1);
|
| }
|
|
|
|
|
| @@ -347,8 +338,8 @@ void ProfileCode::SetName(const char* name) {
|
| void ProfileCode::GenerateAndSetSymbolName(const char* prefix) {
|
| const intptr_t kBuffSize = 512;
|
| char buff[kBuffSize];
|
| - OS::SNPrint(&buff[0], kBuffSize-1, "%s [%" Px ", %" Px ")",
|
| - prefix, start(), end());
|
| + OS::SNPrint(&buff[0], kBuffSize - 1, "%s [%" Px ", %" Px ")", prefix, start(),
|
| + end());
|
| SetName(buff);
|
| }
|
|
|
| @@ -527,8 +518,8 @@ class ProfileFunctionTable : public ZoneAllocated {
|
| : null_function_(Function::ZoneHandle()),
|
| unknown_function_(NULL),
|
| table_(8) {
|
| - unknown_function_ = Add(ProfileFunction::kUnknownFunction,
|
| - "<unknown Dart function>");
|
| + unknown_function_ =
|
| + Add(ProfileFunction::kUnknownFunction, "<unknown Dart function>");
|
| }
|
|
|
| ProfileFunction* LookupOrAdd(const Function& function) {
|
| @@ -568,9 +559,7 @@ class ProfileFunctionTable : public ZoneAllocated {
|
| return Add(ProfileFunction::kStubFunction, name);
|
| }
|
|
|
| - intptr_t length() const {
|
| - return table_.length();
|
| - }
|
| + intptr_t length() const { return table_.length(); }
|
|
|
| ProfileFunction* At(intptr_t i) const {
|
| ASSERT(i >= 0);
|
| @@ -583,21 +572,15 @@ class ProfileFunctionTable : public ZoneAllocated {
|
| ASSERT(kind != ProfileFunction::kDartFunction);
|
| ASSERT(name != NULL);
|
| ProfileFunction* profile_function =
|
| - new ProfileFunction(kind,
|
| - name,
|
| - null_function_,
|
| - table_.length());
|
| + new ProfileFunction(kind, name, null_function_, table_.length());
|
| table_.Add(profile_function);
|
| return profile_function;
|
| }
|
|
|
| ProfileFunction* Add(const Function& function) {
|
| ASSERT(Lookup(function) == NULL);
|
| - ProfileFunction* profile_function =
|
| - new ProfileFunction(ProfileFunction::kDartFunction,
|
| - NULL,
|
| - function,
|
| - table_.length());
|
| + ProfileFunction* profile_function = new ProfileFunction(
|
| + ProfileFunction::kDartFunction, NULL, function, table_.length());
|
| table_.Add(profile_function);
|
| function_hash_.Insert(profile_function);
|
| return profile_function;
|
| @@ -609,17 +592,11 @@ class ProfileFunctionTable : public ZoneAllocated {
|
| typedef const Function* Key;
|
| typedef ProfileFunction* Pair;
|
|
|
| - static Key KeyOf(Pair kv) {
|
| - return kv->function();
|
| - }
|
| + static Key KeyOf(Pair kv) { return kv->function(); }
|
|
|
| - static Value ValueOf(Pair kv) {
|
| - return kv;
|
| - }
|
| + static Value ValueOf(Pair kv) { return kv; }
|
|
|
| - static inline intptr_t Hashcode(Key key) {
|
| - return key->Hash();
|
| - }
|
| + static inline intptr_t Hashcode(Key key) { return key->Hash(); }
|
|
|
| static inline bool IsKeyEqual(Pair kv, Key key) {
|
| return kv->function()->raw() == key->raw();
|
| @@ -667,8 +644,7 @@ ProfileFunction* ProfileCode::SetFunctionAndName(ProfileFunctionTable* table) {
|
| const char* tag_name = UserTags::TagName(start());
|
| ASSERT(tag_name != NULL);
|
| SetName(tag_name);
|
| - } else if (VMTag::IsVMTag(start()) ||
|
| - VMTag::IsRuntimeEntryTag(start()) ||
|
| + } else if (VMTag::IsVMTag(start()) || VMTag::IsRuntimeEntryTag(start()) ||
|
| VMTag::IsNativeEntryTag(start())) {
|
| const char* tag_name = VMTag::TagName(start());
|
| ASSERT(tag_name != NULL);
|
| @@ -701,7 +677,7 @@ ProfileFunction* ProfileCode::SetFunctionAndName(ProfileFunctionTable* table) {
|
| break;
|
| default:
|
| UNIMPLEMENTED();
|
| - break;
|
| + break;
|
| }
|
| }
|
| }
|
| @@ -722,9 +698,7 @@ typedef bool (*RangeCompare)(uword pc, uword region_start, uword region_end);
|
|
|
| class ProfileCodeTable : public ZoneAllocated {
|
| public:
|
| - ProfileCodeTable()
|
| - : table_(8) {
|
| - }
|
| + ProfileCodeTable() : table_(8) {}
|
|
|
| intptr_t length() const { return table_.length(); }
|
|
|
| @@ -846,8 +820,10 @@ class ProfileCodeTable : public ZoneAllocated {
|
| return end <= pc;
|
| }
|
|
|
| - void HandleOverlap(ProfileCode* existing, ProfileCode* code,
|
| - uword start, uword end) {
|
| + void HandleOverlap(ProfileCode* existing,
|
| + ProfileCode* code,
|
| + uword start,
|
| + uword end) {
|
| // We should never see overlapping Dart code regions.
|
| ASSERT(existing->kind() != ProfileCode::kDartCode);
|
| // We should never see overlapping Tag code regions.
|
| @@ -874,12 +850,10 @@ class ProfileCodeTable : public ZoneAllocated {
|
| const intptr_t length = table_.length();
|
| for (intptr_t i = 0; i < length; i++) {
|
| ProfileCode* a = table_[i];
|
| - for (intptr_t j = i+1; j < length; j++) {
|
| + for (intptr_t j = i + 1; j < length; j++) {
|
| ProfileCode* b = table_[j];
|
| - ASSERT(!a->Contains(b->start()) &&
|
| - !a->Contains(b->end() - 1) &&
|
| - !b->Contains(a->start()) &&
|
| - !b->Contains(a->end() - 1));
|
| + ASSERT(!a->Contains(b->start()) && !a->Contains(b->end() - 1) &&
|
| + !b->Contains(a->start()) && !b->Contains(a->end() - 1));
|
| }
|
| }
|
| }
|
| @@ -889,16 +863,12 @@ class ProfileCodeTable : public ZoneAllocated {
|
|
|
|
|
| ProfileTrieNode::ProfileTrieNode(intptr_t table_index)
|
| - : table_index_(table_index),
|
| - count_(0),
|
| - children_(0),
|
| - frame_id_(-1) {
|
| + : table_index_(table_index), count_(0), children_(0), frame_id_(-1) {
|
| ASSERT(table_index_ >= 0);
|
| }
|
|
|
|
|
| -ProfileTrieNode::~ProfileTrieNode() {
|
| -}
|
| +ProfileTrieNode::~ProfileTrieNode() {}
|
|
|
|
|
| void ProfileTrieNode::SortChildren() {
|
| @@ -923,8 +893,7 @@ intptr_t ProfileTrieNode::IndexOf(ProfileTrieNode* node) {
|
| class ProfileCodeTrieNode : public ProfileTrieNode {
|
| public:
|
| explicit ProfileCodeTrieNode(intptr_t table_index)
|
| - : ProfileTrieNode(table_index) {
|
| - }
|
| + : ProfileTrieNode(table_index) {}
|
|
|
| void PrintToJSONArray(JSONArray* array) const {
|
| ASSERT(array != NULL);
|
| @@ -971,21 +940,13 @@ class ProfileCodeTrieNode : public ProfileTrieNode {
|
| class ProfileFunctionTrieNodeCode {
|
| public:
|
| explicit ProfileFunctionTrieNodeCode(intptr_t index)
|
| - : code_index_(index),
|
| - ticks_(0) {
|
| - }
|
| + : code_index_(index), ticks_(0) {}
|
|
|
| - intptr_t index() const {
|
| - return code_index_;
|
| - }
|
| + intptr_t index() const { return code_index_; }
|
|
|
| - void Tick() {
|
| - ticks_++;
|
| - }
|
| + void Tick() { ticks_++; }
|
|
|
| - intptr_t ticks() const {
|
| - return ticks_;
|
| - }
|
| + intptr_t ticks() const { return ticks_; }
|
|
|
| private:
|
| intptr_t code_index_;
|
| @@ -996,9 +957,7 @@ class ProfileFunctionTrieNodeCode {
|
| class ProfileFunctionTrieNode : public ProfileTrieNode {
|
| public:
|
| explicit ProfileFunctionTrieNode(intptr_t table_index)
|
| - : ProfileTrieNode(table_index),
|
| - code_objects_(1) {
|
| - }
|
| + : ProfileTrieNode(table_index), code_objects_(1) {}
|
|
|
| void PrintToJSONArray(JSONArray* array) const {
|
| ASSERT(array != NULL);
|
| @@ -1069,9 +1028,7 @@ class ProfileFunctionTrieNode : public ProfileTrieNode {
|
|
|
| class ProfileCodeInlinedFunctionsCache : public ValueObject {
|
| public:
|
| - ProfileCodeInlinedFunctionsCache()
|
| - : cache_cursor_(0),
|
| - last_hit_(0) {
|
| + ProfileCodeInlinedFunctionsCache() : cache_cursor_(0), last_hit_(0) {
|
| for (intptr_t i = 0; i < kCacheSize; i++) {
|
| cache_[i].Reset();
|
| }
|
| @@ -1082,10 +1039,8 @@ class ProfileCodeInlinedFunctionsCache : public ValueObject {
|
| ~ProfileCodeInlinedFunctionsCache() {
|
| if (FLAG_trace_profiler) {
|
| intptr_t total = cache_hit_ + cache_miss_;
|
| - OS::Print("LOOKUPS: %" Pd " HITS: %" Pd " MISSES: %" Pd "\n",
|
| - total,
|
| - cache_hit_,
|
| - cache_miss_);
|
| + OS::Print("LOOKUPS: %" Pd " HITS: %" Pd " MISSES: %" Pd "\n", total,
|
| + cache_hit_, cache_miss_);
|
| }
|
| }
|
|
|
| @@ -1098,16 +1053,13 @@ class ProfileCodeInlinedFunctionsCache : public ValueObject {
|
| GrowableArray<TokenPosition>** inlined_token_positions,
|
| TokenPosition* token_position) {
|
| const intptr_t offset = OffsetForPC(pc, code, sample, frame_index);
|
| - if (FindInCache(pc,
|
| - offset,
|
| - inlined_functions,
|
| - inlined_token_positions,
|
| + if (FindInCache(pc, offset, inlined_functions, inlined_token_positions,
|
| token_position)) {
|
| // Found in cache.
|
| return;
|
| }
|
| - Add(pc, code, sample, frame_index,
|
| - inlined_functions, inlined_token_positions, token_position);
|
| + Add(pc, code, sample, frame_index, inlined_functions,
|
| + inlined_token_positions, token_position);
|
| }
|
|
|
| private:
|
| @@ -1151,8 +1103,7 @@ class ProfileCodeInlinedFunctionsCache : public ValueObject {
|
| CacheEntry* cache_entry = &cache_[NextFreeIndex()];
|
| cache_entry->pc = pc;
|
| cache_entry->offset = offset;
|
| - code.GetInlinedFunctionsAt(offset,
|
| - &(cache_entry->inlined_functions),
|
| + code.GetInlinedFunctionsAt(offset, &(cache_entry->inlined_functions),
|
| &(cache_entry->inlined_token_positions));
|
| cache_entry->token_position = code.GetTokenPositionAt(offset);
|
| *token_position = (cache_entry->token_position);
|
| @@ -1164,9 +1115,8 @@ class ProfileCodeInlinedFunctionsCache : public ValueObject {
|
| // The inlined token position table does not include the token position
|
| // of the final call. Insert it at the beginning because the table.
|
| // is reversed.
|
| - cache_entry->inlined_token_positions.InsertAt(
|
| - 0,
|
| - cache_entry->token_position);
|
| + cache_entry->inlined_token_positions.InsertAt(0,
|
| + cache_entry->token_position);
|
|
|
| // Write outputs.
|
| *inlined_functions = &(cache_entry->inlined_functions);
|
| @@ -1275,8 +1225,8 @@ class ProfileBuilder : public ValueObject {
|
| private:
|
| // Returns true if |frame_index| in |sample| is using CPU.
|
| static bool IsExecutingFrame(ProcessedSample* sample, intptr_t frame_index) {
|
| - return (frame_index == 0) && (sample->first_frame_executing() ||
|
| - sample->IsAllocationSample());
|
| + return (frame_index == 0) &&
|
| + (sample->first_frame_executing() || sample->IsAllocationSample());
|
| }
|
|
|
| static bool IsInclusiveTrie(Profile::TrieKind kind) {
|
| @@ -1340,17 +1290,13 @@ class ProfileBuilder : public ValueObject {
|
| ASSERT(descriptor != NULL);
|
| const Code& code = Code::Handle(descriptor->code());
|
| ASSERT(!code.IsNull());
|
| - RegisterLiveProfileCode(
|
| - new ProfileCode(ProfileCode::kDartCode,
|
| - code.PayloadStart(),
|
| - code.PayloadStart() + code.Size(),
|
| - code.compile_timestamp(),
|
| - code));
|
| + RegisterLiveProfileCode(new ProfileCode(
|
| + ProfileCode::kDartCode, code.PayloadStart(),
|
| + code.PayloadStart() + code.Size(), code.compile_timestamp(), code));
|
| }
|
|
|
| // Iterate over samples.
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
| const int64_t timestamp = sample->timestamp();
|
| @@ -1371,8 +1317,7 @@ class ProfileBuilder : public ValueObject {
|
|
|
| // Make sure that a ProfileCode objects exist for all pcs in the sample
|
| // and tick each one.
|
| - for (intptr_t frame_index = 0;
|
| - frame_index < sample->length();
|
| + for (intptr_t frame_index = 0; frame_index < sample->length();
|
| frame_index++) {
|
| const uword pc = sample->At(frame_index);
|
| ASSERT(pc != 0);
|
| @@ -1461,8 +1406,7 @@ class ProfileBuilder : public ValueObject {
|
| void BuildInclusiveCodeTrie(ProfileCodeTrieNode* root) {
|
| ScopeTimer sw("ProfileBuilder::BuildInclusiveCodeTrie",
|
| FLAG_trace_profiler);
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
|
|
| @@ -1482,8 +1426,7 @@ class ProfileBuilder : public ValueObject {
|
|
|
| // Walk the sampled PCs.
|
| Code& code = Code::Handle();
|
| - for (intptr_t frame_index = sample->length() - 1;
|
| - frame_index >= 0;
|
| + for (intptr_t frame_index = sample->length() - 1; frame_index >= 0;
|
| frame_index--) {
|
| ASSERT(sample->At(frame_index) != 0);
|
| intptr_t index =
|
| @@ -1507,8 +1450,7 @@ class ProfileBuilder : public ValueObject {
|
| void BuildExclusiveCodeTrie(ProfileCodeTrieNode* root) {
|
| ScopeTimer sw("ProfileBuilder::BuildExclusiveCodeTrie",
|
| FLAG_trace_profiler);
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
|
|
| @@ -1527,8 +1469,7 @@ class ProfileBuilder : public ValueObject {
|
|
|
| // Walk the sampled PCs.
|
| Code& code = Code::Handle();
|
| - for (intptr_t frame_index = 0;
|
| - frame_index < sample->length();
|
| + for (intptr_t frame_index = 0; frame_index < sample->length();
|
| frame_index++) {
|
| ASSERT(sample->At(frame_index) != 0);
|
| intptr_t index =
|
| @@ -1552,9 +1493,8 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| void BuildFunctionTrie(Profile::TrieKind kind) {
|
| - ProfileFunctionTrieNode* root =
|
| - new ProfileFunctionTrieNode(
|
| - GetProfileFunctionTagIndex(VMTag::kRootTagId));
|
| + ProfileFunctionTrieNode* root = new ProfileFunctionTrieNode(
|
| + GetProfileFunctionTagIndex(VMTag::kRootTagId));
|
| // We tick the functions while building the trie, but, we don't want to do
|
| // it for both tries, just the exclusive trie.
|
| inclusive_tree_ = IsInclusiveTrie(kind);
|
| @@ -1572,8 +1512,7 @@ class ProfileBuilder : public ValueObject {
|
| ScopeTimer sw("ProfileBuilder::BuildInclusiveFunctionTrie",
|
| FLAG_trace_profiler);
|
| ASSERT(!tick_functions_);
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
|
|
| @@ -1590,8 +1529,7 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| // Walk the sampled PCs.
|
| - for (intptr_t frame_index = sample->length() - 1;
|
| - frame_index >= 0;
|
| + for (intptr_t frame_index = sample->length() - 1; frame_index >= 0;
|
| frame_index--) {
|
| ASSERT(sample->At(frame_index) != 0);
|
| current = ProcessFrame(current, sample_index, sample, frame_index);
|
| @@ -1609,8 +1547,7 @@ class ProfileBuilder : public ValueObject {
|
| ScopeTimer sw("ProfileBuilder::BuildExclusiveFunctionTrie",
|
| FLAG_trace_profiler);
|
| ASSERT(tick_functions_);
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
|
|
| @@ -1628,8 +1565,7 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| // Walk the sampled PCs.
|
| - for (intptr_t frame_index = 0;
|
| - frame_index < sample->length();
|
| + for (intptr_t frame_index = 0; frame_index < sample->length();
|
| frame_index++) {
|
| ASSERT(sample->At(frame_index) != 0);
|
| current = ProcessFrame(current, sample_index, sample, frame_index);
|
| @@ -1645,14 +1581,12 @@ class ProfileBuilder : public ValueObject {
|
| }
|
| }
|
|
|
| - ProfileFunctionTrieNode* ProcessFrame(
|
| - ProfileFunctionTrieNode* current,
|
| - intptr_t sample_index,
|
| - ProcessedSample* sample,
|
| - intptr_t frame_index) {
|
| + ProfileFunctionTrieNode* ProcessFrame(ProfileFunctionTrieNode* current,
|
| + intptr_t sample_index,
|
| + ProcessedSample* sample,
|
| + intptr_t frame_index) {
|
| const uword pc = sample->At(frame_index);
|
| - ProfileCode* profile_code = GetProfileCode(pc,
|
| - sample->timestamp());
|
| + ProfileCode* profile_code = GetProfileCode(pc, sample->timestamp());
|
| ProfileFunction* function = profile_code->function();
|
| ASSERT(function != NULL);
|
| const intptr_t code_index = profile_code->code_table_index();
|
| @@ -1663,34 +1597,26 @@ class ProfileBuilder : public ValueObject {
|
| TokenPosition token_position = TokenPosition::kNoSource;
|
| if (!code.IsNull()) {
|
| inlined_functions_cache_.Get(pc, code, sample, frame_index,
|
| - &inlined_functions,
|
| - &inlined_token_positions,
|
| + &inlined_functions, &inlined_token_positions,
|
| &token_position);
|
| if (FLAG_trace_profiler_verbose) {
|
| for (intptr_t i = 0; i < inlined_functions->length(); i++) {
|
| const String& name =
|
| String::Handle((*inlined_functions)[i]->QualifiedScrubbedName());
|
| - THR_Print("InlinedFunction[%" Pd "] = {%s, %s}\n",
|
| - i,
|
| + THR_Print("InlinedFunction[%" Pd "] = {%s, %s}\n", i,
|
| name.ToCString(),
|
| (*inlined_token_positions)[i].ToCString());
|
| }
|
| }
|
| }
|
| - if (code.IsNull() ||
|
| - (inlined_functions == NULL) ||
|
| + if (code.IsNull() || (inlined_functions == NULL) ||
|
| (inlined_functions->length() == 0)) {
|
| // No inlined functions.
|
| if (inclusive_tree_) {
|
| current = AppendKind(code, current);
|
| }
|
| - current = ProcessFunction(current,
|
| - sample_index,
|
| - sample,
|
| - frame_index,
|
| - function,
|
| - token_position,
|
| - code_index);
|
| + current = ProcessFunction(current, sample_index, sample, frame_index,
|
| + function, token_position, code_index);
|
| if (!inclusive_tree_) {
|
| current = AppendKind(code, current);
|
| }
|
| @@ -1709,13 +1635,9 @@ class ProfileBuilder : public ValueObject {
|
| if (inliner) {
|
| current = AppendKind(code, current);
|
| }
|
| - current = ProcessInlinedFunction(current,
|
| - sample_index,
|
| - sample,
|
| - frame_index,
|
| - inlined_function,
|
| - inlined_token_position,
|
| - code_index);
|
| + current = ProcessInlinedFunction(current, sample_index, sample,
|
| + frame_index, inlined_function,
|
| + inlined_token_position, code_index);
|
| if (inliner) {
|
| current = AppendKind(kInlineStart, current);
|
| }
|
| @@ -1733,13 +1655,9 @@ class ProfileBuilder : public ValueObject {
|
| if (inliner) {
|
| current = AppendKind(kInlineStart, current);
|
| }
|
| - current = ProcessInlinedFunction(current,
|
| - sample_index,
|
| - sample,
|
| - frame_index + i,
|
| - inlined_function,
|
| - inlined_token_position,
|
| - code_index);
|
| + current = ProcessInlinedFunction(current, sample_index, sample,
|
| + frame_index + i, inlined_function,
|
| + inlined_token_position, code_index);
|
| if (inliner) {
|
| current = AppendKind(code, current);
|
| }
|
| @@ -1760,13 +1678,8 @@ class ProfileBuilder : public ValueObject {
|
| ProfileFunctionTable* function_table = profile_->functions_;
|
| ProfileFunction* function = function_table->LookupOrAdd(*inlined_function);
|
| ASSERT(function != NULL);
|
| - return ProcessFunction(current,
|
| - sample_index,
|
| - sample,
|
| - frame_index,
|
| - function,
|
| - inlined_token_position,
|
| - code_index);
|
| + return ProcessFunction(current, sample_index, sample, frame_index, function,
|
| + inlined_token_position, code_index);
|
| }
|
|
|
| bool ShouldTickNode(ProcessedSample* sample, intptr_t frame_index) {
|
| @@ -1775,8 +1688,8 @@ class ProfileBuilder : public ValueObject {
|
| }
|
| // Only tick the first frame's node, if we are executing OR
|
| // vm tags have been emitted.
|
| - return IsExecutingFrame(sample, frame_index) ||
|
| - !FLAG_profile_vm || vm_tags_emitted();
|
| + return IsExecutingFrame(sample, frame_index) || !FLAG_profile_vm ||
|
| + vm_tags_emitted();
|
| }
|
|
|
| ProfileFunctionTrieNode* ProcessFunction(ProfileFunctionTrieNode* current,
|
| @@ -1791,15 +1704,11 @@ class ProfileBuilder : public ValueObject {
|
| }
|
| if (tick_functions_) {
|
| if (FLAG_trace_profiler_verbose) {
|
| - THR_Print("S[%" Pd "]F[%" Pd "] %s %s 0x%" Px "\n",
|
| - sample_index,
|
| - frame_index,
|
| - function->Name(),
|
| - token_position.ToCString(),
|
| + THR_Print("S[%" Pd "]F[%" Pd "] %s %s 0x%" Px "\n", sample_index,
|
| + frame_index, function->Name(), token_position.ToCString(),
|
| sample->At(frame_index));
|
| }
|
| - function->Tick(IsExecutingFrame(sample, frame_index),
|
| - sample_index,
|
| + function->Tick(IsExecutingFrame(sample, frame_index), sample_index,
|
| token_position);
|
| }
|
| function->AddProfileCode(code_index);
|
| @@ -1847,8 +1756,7 @@ class ProfileBuilder : public ValueObject {
|
| return current;
|
| }
|
|
|
| - ProfileCodeTrieNode* AppendVMTag(uword vm_tag,
|
| - ProfileCodeTrieNode* current) {
|
| + ProfileCodeTrieNode* AppendVMTag(uword vm_tag, ProfileCodeTrieNode* current) {
|
| if (VMTag::IsNativeEntryTag(vm_tag)) {
|
| // Insert a dummy kNativeTagId node.
|
| intptr_t tag_index = GetProfileCodeTagIndex(VMTag::kNativeTagId);
|
| @@ -1871,10 +1779,10 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| ProfileCodeTrieNode* AppendSpecificNativeRuntimeEntryVMTag(
|
| - uword vm_tag, ProfileCodeTrieNode* current) {
|
| + uword vm_tag,
|
| + ProfileCodeTrieNode* current) {
|
| // Only Native and Runtime entries have a second VM tag.
|
| - if (!VMTag::IsNativeEntryTag(vm_tag) &&
|
| - !VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| + if (!VMTag::IsNativeEntryTag(vm_tag) && !VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| return current;
|
| }
|
| intptr_t tag_index = GetProfileCodeTagIndex(vm_tag);
|
| @@ -1976,8 +1884,7 @@ class ProfileBuilder : public ValueObject {
|
| return current;
|
| }
|
|
|
| - if (VMTag::IsNativeEntryTag(vm_tag) ||
|
| - VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| + if (VMTag::IsNativeEntryTag(vm_tag) || VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| current = AppendSpecificNativeRuntimeEntryVMTag(vm_tag, current);
|
| } else {
|
| intptr_t tag_index = GetProfileCodeTagIndex(vm_tag);
|
| @@ -2025,9 +1932,7 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| // ProfileFunctionTrieNode
|
| - void ResetKind() {
|
| - info_kind_ = kNone;
|
| - }
|
| + void ResetKind() { info_kind_ = kNone; }
|
|
|
| ProfileFunctionTrieNode* AppendKind(ProfileInfoKind kind,
|
| ProfileFunctionTrieNode* current) {
|
| @@ -2101,10 +2006,10 @@ class ProfileBuilder : public ValueObject {
|
| }
|
|
|
| ProfileFunctionTrieNode* AppendSpecificNativeRuntimeEntryVMTag(
|
| - uword vm_tag, ProfileFunctionTrieNode* current) {
|
| + uword vm_tag,
|
| + ProfileFunctionTrieNode* current) {
|
| // Only Native and Runtime entries have a second VM tag.
|
| - if (!VMTag::IsNativeEntryTag(vm_tag) &&
|
| - !VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| + if (!VMTag::IsNativeEntryTag(vm_tag) && !VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| return current;
|
| }
|
| intptr_t tag_index = GetProfileFunctionTagIndex(vm_tag);
|
| @@ -2130,8 +2035,7 @@ class ProfileBuilder : public ValueObject {
|
| if (!VMTag::IsExitFrameTag(vm_tag)) {
|
| return current;
|
| }
|
| - if (VMTag::IsNativeEntryTag(vm_tag) ||
|
| - VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| + if (VMTag::IsNativeEntryTag(vm_tag) || VMTag::IsRuntimeEntryTag(vm_tag)) {
|
| current = AppendSpecificNativeRuntimeEntryVMTag(vm_tag, current);
|
| } else {
|
| intptr_t tag_index = GetProfileFunctionTagIndex(vm_tag);
|
| @@ -2240,21 +2144,15 @@ class ProfileBuilder : public ValueObject {
|
| // Already created.
|
| return;
|
| }
|
| - ProfileCode* code = new ProfileCode(ProfileCode::kTagCode,
|
| - tag,
|
| - tag + 1,
|
| - 0,
|
| - null_code_);
|
| + ProfileCode* code =
|
| + new ProfileCode(ProfileCode::kTagCode, tag, tag + 1, 0, null_code_);
|
| index = tag_table->InsertCode(code);
|
| ASSERT(index >= 0);
|
| }
|
|
|
| ProfileCode* CreateProfileCodeReused(uword pc) {
|
| - ProfileCode* code = new ProfileCode(ProfileCode::kReusedCode,
|
| - pc,
|
| - pc + 1,
|
| - 0,
|
| - null_code_);
|
| + ProfileCode* code =
|
| + new ProfileCode(ProfileCode::kReusedCode, pc, pc + 1, 0, null_code_);
|
| return code;
|
| }
|
|
|
| @@ -2277,8 +2175,8 @@ class ProfileBuilder : public ValueObject {
|
|
|
| // Check NativeSymbolResolver for pc.
|
| uintptr_t native_start = 0;
|
| - char* native_name = NativeSymbolResolver::LookupSymbolName(pc,
|
| - &native_start);
|
| + char* native_name =
|
| + NativeSymbolResolver::LookupSymbolName(pc, &native_start);
|
| if (native_name == NULL) {
|
| // Failed to find a native symbol for pc.
|
| native_start = pc;
|
| @@ -2291,11 +2189,8 @@ class ProfileBuilder : public ValueObject {
|
| #endif
|
|
|
| ASSERT(pc >= native_start);
|
| - profile_code = new ProfileCode(ProfileCode::kNativeCode,
|
| - native_start,
|
| - pc + 1,
|
| - 0,
|
| - code);
|
| + profile_code = new ProfileCode(ProfileCode::kNativeCode, native_start,
|
| + pc + 1, 0, code);
|
| if (native_name != NULL) {
|
| profile_code->SetName(native_name);
|
| NativeSymbolResolver::FreeSymbolName(native_name);
|
| @@ -2340,14 +2235,11 @@ class ProfileBuilder : public ValueObject {
|
| return FindOrRegisterDeadProfileCode(pc);
|
| }
|
|
|
| - Profile::TagOrder tag_order() const {
|
| - return tag_order_;
|
| - }
|
| + Profile::TagOrder tag_order() const { return tag_order_; }
|
|
|
| bool vm_tags_emitted() const {
|
| return (tag_order_ == Profile::kUserVM) ||
|
| - (tag_order_ == Profile::kVMUser) ||
|
| - (tag_order_ == Profile::kVM);
|
| + (tag_order_ == Profile::kVMUser) || (tag_order_ == Profile::kVM);
|
| }
|
|
|
| bool TagsEnabled(intptr_t extra_tags_bits) const {
|
| @@ -2441,10 +2333,8 @@ ProfileTrieNode* Profile::GetTrieRoot(TrieKind trie_kind) {
|
|
|
|
|
| void Profile::PrintHeaderJSON(JSONObject* obj) {
|
| - obj->AddProperty("samplePeriod",
|
| - static_cast<intptr_t>(FLAG_profile_period));
|
| - obj->AddProperty("stackDepth",
|
| - static_cast<intptr_t>(FLAG_max_profile_depth));
|
| + obj->AddProperty("samplePeriod", static_cast<intptr_t>(FLAG_profile_period));
|
| + obj->AddProperty("stackDepth", static_cast<intptr_t>(FLAG_max_profile_depth));
|
| obj->AddProperty("sampleCount", sample_count());
|
| obj->AddProperty("timeSpan", MicrosecondsToSeconds(GetTimeSpan()));
|
| obj->AddPropertyTimeMicros("timeOriginMicros", min_time());
|
| @@ -2453,36 +2343,24 @@ void Profile::PrintHeaderJSON(JSONObject* obj) {
|
| ProfilerCounters counters = Profiler::counters();
|
| {
|
| JSONObject counts(obj, "counters");
|
| - counts.AddProperty64(
|
| - "bail_out_unknown_task",
|
| - counters.bail_out_unknown_task);
|
| - counts.AddProperty64(
|
| - "bail_out_jump_to_exception_handler",
|
| - counters.bail_out_jump_to_exception_handler);
|
| - counts.AddProperty64(
|
| - "bail_out_check_isolate",
|
| - counters.bail_out_check_isolate);
|
| - counts.AddProperty64(
|
| - "single_frame_sample_deoptimizing",
|
| - counters.single_frame_sample_deoptimizing);
|
| - counts.AddProperty64(
|
| - "single_frame_sample_register_check",
|
| - counters.single_frame_sample_register_check);
|
| + counts.AddProperty64("bail_out_unknown_task",
|
| + counters.bail_out_unknown_task);
|
| + counts.AddProperty64("bail_out_jump_to_exception_handler",
|
| + counters.bail_out_jump_to_exception_handler);
|
| + counts.AddProperty64("bail_out_check_isolate",
|
| + counters.bail_out_check_isolate);
|
| + counts.AddProperty64("single_frame_sample_deoptimizing",
|
| + counters.single_frame_sample_deoptimizing);
|
| + counts.AddProperty64("single_frame_sample_register_check",
|
| + counters.single_frame_sample_register_check);
|
| counts.AddProperty64(
|
| "single_frame_sample_get_and_validate_stack_bounds",
|
| counters.single_frame_sample_get_and_validate_stack_bounds);
|
| - counts.AddProperty64(
|
| - "stack_walker_native",
|
| - counters.stack_walker_native);
|
| - counts.AddProperty64(
|
| - "stack_walker_dart_exit",
|
| - counters.stack_walker_dart_exit);
|
| - counts.AddProperty64(
|
| - "stack_walker_dart",
|
| - counters.stack_walker_dart);
|
| - counts.AddProperty64(
|
| - "stack_walker_none",
|
| - counters.stack_walker_none);
|
| + counts.AddProperty64("stack_walker_native", counters.stack_walker_native);
|
| + counts.AddProperty64("stack_walker_dart_exit",
|
| + counters.stack_walker_dart_exit);
|
| + counts.AddProperty64("stack_walker_dart", counters.stack_walker_dart);
|
| + counts.AddProperty64("stack_walker_none", counters.stack_walker_none);
|
| }
|
| }
|
|
|
| @@ -2501,16 +2379,16 @@ void Profile::PrintTimelineFrameJSON(JSONObject* frames,
|
| // The samples from many isolates may be merged into a single timeline,
|
| // so prefix frames id with the isolate.
|
| intptr_t isolate_id = reinterpret_cast<intptr_t>(isolate_);
|
| - const char* key = zone_->PrintToString("%" Pd "-%" Pd,
|
| - isolate_id, current->frame_id());
|
| + const char* key =
|
| + zone_->PrintToString("%" Pd "-%" Pd, isolate_id, current->frame_id());
|
| JSONObject frame(frames, key);
|
| frame.AddProperty("category", "Dart");
|
| ProfileFunction* func = GetFunction(current->table_index());
|
| frame.AddProperty("name", func->Name());
|
| if (parent != NULL) {
|
| ASSERT(parent->frame_id() != -1);
|
| - frame.AddPropertyF("parent", "%" Pd "-%" Pd,
|
| - isolate_id, parent->frame_id());
|
| + frame.AddPropertyF("parent", "%" Pd "-%" Pd, isolate_id,
|
| + parent->frame_id());
|
| }
|
| }
|
|
|
| @@ -2536,8 +2414,7 @@ void Profile::PrintTimelineJSON(JSONStream* stream) {
|
| JSONArray events(&obj, "traceEvents");
|
| intptr_t pid = OS::ProcessId();
|
| intptr_t isolate_id = reinterpret_cast<intptr_t>(isolate_);
|
| - for (intptr_t sample_index = 0;
|
| - sample_index < samples_->length();
|
| + for (intptr_t sample_index = 0; sample_index < samples_->length();
|
| sample_index++) {
|
| ProcessedSample* sample = samples_->At(sample_index);
|
| JSONObject event(&events);
|
| @@ -2549,8 +2426,7 @@ void Profile::PrintTimelineJSON(JSONStream* stream) {
|
|
|
| ProfileTrieNode* trie = sample->timeline_trie();
|
| ASSERT(trie->frame_id() != -1);
|
| - event.AddPropertyF("sf", "%" Pd "-%" Pd,
|
| - isolate_id, trie->frame_id());
|
| + event.AddPropertyF("sf", "%" Pd "-%" Pd, isolate_id, trie->frame_id());
|
| }
|
| }
|
| }
|
| @@ -2801,12 +2677,9 @@ class NoAllocationSampleFilter : public SampleFilter {
|
| : SampleFilter(isolate,
|
| thread_task_mask,
|
| time_origin_micros,
|
| - time_extent_micros) {
|
| - }
|
| + time_extent_micros) {}
|
|
|
| - bool FilterSample(Sample* sample) {
|
| - return !sample->is_allocation_sample();
|
| - }
|
| + bool FilterSample(Sample* sample) { return !sample->is_allocation_sample(); }
|
| };
|
|
|
|
|
| @@ -2817,10 +2690,8 @@ void ProfilerService::PrintJSON(JSONStream* stream,
|
| int64_t time_extent_micros) {
|
| Thread* thread = Thread::Current();
|
| Isolate* isolate = thread->isolate();
|
| - NoAllocationSampleFilter filter(isolate,
|
| - Thread::kMutatorTask,
|
| - time_origin_micros,
|
| - time_extent_micros);
|
| + NoAllocationSampleFilter filter(isolate, Thread::kMutatorTask,
|
| + time_origin_micros, time_extent_micros);
|
| const bool as_timeline = false;
|
| PrintJSONImpl(thread, stream, tag_order, extra_tags, &filter, as_timeline);
|
| }
|
| @@ -2858,11 +2729,8 @@ void ProfilerService::PrintAllocationJSON(JSONStream* stream,
|
| int64_t time_extent_micros) {
|
| Thread* thread = Thread::Current();
|
| Isolate* isolate = thread->isolate();
|
| - ClassAllocationSampleFilter filter(isolate,
|
| - cls,
|
| - Thread::kMutatorTask,
|
| - time_origin_micros,
|
| - time_extent_micros);
|
| + ClassAllocationSampleFilter filter(isolate, cls, Thread::kMutatorTask,
|
| + time_origin_micros, time_extent_micros);
|
| const bool as_timeline = false;
|
| PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline);
|
| }
|
| @@ -2876,11 +2744,8 @@ void ProfilerService::PrintTimelineJSON(JSONStream* stream,
|
| Isolate* isolate = thread->isolate();
|
| const intptr_t thread_task_mask = Thread::kMutatorTask |
|
| Thread::kCompilerTask |
|
| - Thread::kSweeperTask |
|
| - Thread::kMarkerTask;
|
| - NoAllocationSampleFilter filter(isolate,
|
| - thread_task_mask,
|
| - time_origin_micros,
|
| + Thread::kSweeperTask | Thread::kMarkerTask;
|
| + NoAllocationSampleFilter filter(isolate, thread_task_mask, time_origin_micros,
|
| time_extent_micros);
|
| const bool as_timeline = true;
|
| PrintJSONImpl(thread, stream, tag_order, kNoExtraTags, &filter, as_timeline);
|
|
|