| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium 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 #include "base/test/trace_event_analyzer.h" | 5 #include "base/test/trace_event_analyzer.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> |
| 10 #include <set> | 11 #include <set> |
| 11 | 12 |
| 12 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/strings/pattern.h" | 14 #include "base/strings/pattern.h" |
| 15 #include "base/values.h" | 15 #include "base/values.h" |
| 16 | 16 |
| 17 namespace trace_analyzer { | 17 namespace trace_analyzer { |
| 18 | 18 |
| 19 // TraceEvent | 19 // TraceEvent |
| 20 | 20 |
| 21 TraceEvent::TraceEvent() | 21 TraceEvent::TraceEvent() |
| 22 : thread(0, 0), | 22 : thread(0, 0), |
| 23 timestamp(0), | 23 timestamp(0), |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 double* arg) const { | 137 double* arg) const { |
| 138 const auto it = arg_numbers.find(name); | 138 const auto it = arg_numbers.find(name); |
| 139 if (it != arg_numbers.end()) { | 139 if (it != arg_numbers.end()) { |
| 140 *arg = it->second; | 140 *arg = it->second; |
| 141 return true; | 141 return true; |
| 142 } | 142 } |
| 143 return false; | 143 return false; |
| 144 } | 144 } |
| 145 | 145 |
| 146 bool TraceEvent::GetArgAsValue(const std::string& name, | 146 bool TraceEvent::GetArgAsValue(const std::string& name, |
| 147 scoped_ptr<base::Value>* arg) const { | 147 std::unique_ptr<base::Value>* arg) const { |
| 148 const auto it = arg_values.find(name); | 148 const auto it = arg_values.find(name); |
| 149 if (it != arg_values.end()) { | 149 if (it != arg_values.end()) { |
| 150 *arg = it->second->CreateDeepCopy(); | 150 *arg = it->second->CreateDeepCopy(); |
| 151 return true; | 151 return true; |
| 152 } | 152 } |
| 153 return false; | 153 return false; |
| 154 } | 154 } |
| 155 | 155 |
| 156 bool TraceEvent::HasStringArg(const std::string& name) const { | 156 bool TraceEvent::HasStringArg(const std::string& name) const { |
| 157 return (arg_strings.find(name) != arg_strings.end()); | 157 return (arg_strings.find(name) != arg_strings.end()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 186 return static_cast<int>(arg_double); | 186 return static_cast<int>(arg_double); |
| 187 } | 187 } |
| 188 | 188 |
| 189 bool TraceEvent::GetKnownArgAsBool(const std::string& name) const { | 189 bool TraceEvent::GetKnownArgAsBool(const std::string& name) const { |
| 190 double arg_double = 0; | 190 double arg_double = 0; |
| 191 bool result = GetArgAsNumber(name, &arg_double); | 191 bool result = GetArgAsNumber(name, &arg_double); |
| 192 DCHECK(result); | 192 DCHECK(result); |
| 193 return (arg_double != 0.0); | 193 return (arg_double != 0.0); |
| 194 } | 194 } |
| 195 | 195 |
| 196 scoped_ptr<base::Value> TraceEvent::GetKnownArgAsValue( | 196 std::unique_ptr<base::Value> TraceEvent::GetKnownArgAsValue( |
| 197 const std::string& name) const { | 197 const std::string& name) const { |
| 198 scoped_ptr<base::Value> arg_value; | 198 std::unique_ptr<base::Value> arg_value; |
| 199 bool result = GetArgAsValue(name, &arg_value); | 199 bool result = GetArgAsValue(name, &arg_value); |
| 200 DCHECK(result); | 200 DCHECK(result); |
| 201 return arg_value; | 201 return arg_value; |
| 202 } | 202 } |
| 203 | 203 |
| 204 // QueryNode | 204 // QueryNode |
| 205 | 205 |
| 206 QueryNode::QueryNode(const Query& query) : query_(query) { | 206 QueryNode::QueryNode(const Query& query) : query_(query) { |
| 207 } | 207 } |
| 208 | 208 |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 672 if (ignore_metadata_events && events[i].phase == TRACE_EVENT_PHASE_METADATA) | 672 if (ignore_metadata_events && events[i].phase == TRACE_EVENT_PHASE_METADATA) |
| 673 continue; | 673 continue; |
| 674 if (query.Evaluate(events[i])) | 674 if (query.Evaluate(events[i])) |
| 675 output->push_back(&events[i]); | 675 output->push_back(&events[i]); |
| 676 } | 676 } |
| 677 return output->size(); | 677 return output->size(); |
| 678 } | 678 } |
| 679 | 679 |
| 680 bool ParseEventsFromJson(const std::string& json, | 680 bool ParseEventsFromJson(const std::string& json, |
| 681 std::vector<TraceEvent>* output) { | 681 std::vector<TraceEvent>* output) { |
| 682 scoped_ptr<base::Value> root = base::JSONReader::Read(json); | 682 std::unique_ptr<base::Value> root = base::JSONReader::Read(json); |
| 683 | 683 |
| 684 base::ListValue* root_list = NULL; | 684 base::ListValue* root_list = NULL; |
| 685 if (!root.get() || !root->GetAsList(&root_list)) | 685 if (!root.get() || !root->GetAsList(&root_list)) |
| 686 return false; | 686 return false; |
| 687 | 687 |
| 688 for (size_t i = 0; i < root_list->GetSize(); ++i) { | 688 for (size_t i = 0; i < root_list->GetSize(); ++i) { |
| 689 base::Value* item = NULL; | 689 base::Value* item = NULL; |
| 690 if (root_list->Get(i, &item)) { | 690 if (root_list->Get(i, &item)) { |
| 691 TraceEvent event; | 691 TraceEvent event; |
| 692 if (event.SetFromJSON(item)) | 692 if (event.SetFromJSON(item)) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 705 | 705 |
| 706 TraceAnalyzer::TraceAnalyzer() | 706 TraceAnalyzer::TraceAnalyzer() |
| 707 : ignore_metadata_events_(false), | 707 : ignore_metadata_events_(false), |
| 708 allow_assocation_changes_(true) {} | 708 allow_assocation_changes_(true) {} |
| 709 | 709 |
| 710 TraceAnalyzer::~TraceAnalyzer() { | 710 TraceAnalyzer::~TraceAnalyzer() { |
| 711 } | 711 } |
| 712 | 712 |
| 713 // static | 713 // static |
| 714 TraceAnalyzer* TraceAnalyzer::Create(const std::string& json_events) { | 714 TraceAnalyzer* TraceAnalyzer::Create(const std::string& json_events) { |
| 715 scoped_ptr<TraceAnalyzer> analyzer(new TraceAnalyzer()); | 715 std::unique_ptr<TraceAnalyzer> analyzer(new TraceAnalyzer()); |
| 716 if (analyzer->SetEvents(json_events)) | 716 if (analyzer->SetEvents(json_events)) |
| 717 return analyzer.release(); | 717 return analyzer.release(); |
| 718 return NULL; | 718 return NULL; |
| 719 } | 719 } |
| 720 | 720 |
| 721 bool TraceAnalyzer::SetEvents(const std::string& json_events) { | 721 bool TraceAnalyzer::SetEvents(const std::string& json_events) { |
| 722 raw_events_.clear(); | 722 raw_events_.clear(); |
| 723 if (!ParseEventsFromJson(json_events, &raw_events_)) | 723 if (!ParseEventsFromJson(json_events, &raw_events_)) |
| 724 return false; | 724 return false; |
| 725 std::stable_sort(raw_events_.begin(), raw_events_.end()); | 725 std::stable_sort(raw_events_.begin(), raw_events_.end()); |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 end_position = (end_position < events.size()) ? end_position : events.size(); | 990 end_position = (end_position < events.size()) ? end_position : events.size(); |
| 991 size_t count = 0u; | 991 size_t count = 0u; |
| 992 for (size_t i = begin_position; i < end_position; ++i) { | 992 for (size_t i = begin_position; i < end_position; ++i) { |
| 993 if (query.Evaluate(*events.at(i))) | 993 if (query.Evaluate(*events.at(i))) |
| 994 ++count; | 994 ++count; |
| 995 } | 995 } |
| 996 return count; | 996 return count; |
| 997 } | 997 } |
| 998 | 998 |
| 999 } // namespace trace_analyzer | 999 } // namespace trace_analyzer |
| OLD | NEW |