Index: base/test/trace_event_analyzer.cc |
diff --git a/base/test/trace_event_analyzer.cc b/base/test/trace_event_analyzer.cc |
index fc775f27b14d26dfef8c660d0e1c543c41879b1f..18bfe38f9867cdf9743c4959f95a39e39047d79a 100644 |
--- a/base/test/trace_event_analyzer.cc |
+++ b/base/test/trace_event_analyzer.cc |
@@ -26,11 +26,13 @@ TraceEvent::TraceEvent() |
other_event(NULL) { |
} |
-TraceEvent::TraceEvent(const TraceEvent& other) = default; |
+TraceEvent::TraceEvent(TraceEvent&& other) = default; |
TraceEvent::~TraceEvent() { |
} |
+TraceEvent& TraceEvent::operator=(TraceEvent&& rhs) = default; |
+ |
bool TraceEvent::SetFromJSON(const base::Value* event_value) { |
if (event_value->GetType() != base::Value::TYPE_DICTIONARY) { |
LOG(ERROR) << "Value must be TYPE_DICTIONARY"; |
@@ -54,6 +56,12 @@ bool TraceEvent::SetFromJSON(const base::Value* event_value) { |
bool require_id = (phase == TRACE_EVENT_PHASE_ASYNC_BEGIN || |
phase == TRACE_EVENT_PHASE_ASYNC_STEP_INTO || |
phase == TRACE_EVENT_PHASE_ASYNC_STEP_PAST || |
+ phase == TRACE_EVENT_PHASE_MEMORY_DUMP || |
+ phase == TRACE_EVENT_PHASE_ENTER_CONTEXT || |
+ phase == TRACE_EVENT_PHASE_LEAVE_CONTEXT || |
+ phase == TRACE_EVENT_PHASE_CREATE_OBJECT || |
+ phase == TRACE_EVENT_PHASE_DELETE_OBJECT || |
+ phase == TRACE_EVENT_PHASE_SNAPSHOT_OBJECT || |
phase == TRACE_EVENT_PHASE_ASYNC_END); |
if (require_origin && !dictionary->GetInteger("pid", &thread.process_id)) { |
@@ -103,11 +111,9 @@ bool TraceEvent::SetFromJSON(const base::Value* event_value) { |
arg_numbers[it.key()] = static_cast<double>(boolean ? 1 : 0); |
} else if (it.value().GetAsDouble(&double_num)) { |
arg_numbers[it.key()] = double_num; |
- } else { |
- LOG(WARNING) << "Value type of argument is not supported: " << |
- static_cast<int>(it.value().GetType()); |
- continue; // Skip non-supported arguments. |
} |
+ // Record all arguments as values. |
+ arg_values[it.key()] = it.value().CreateDeepCopy(); |
} |
return true; |
@@ -119,9 +125,9 @@ double TraceEvent::GetAbsTimeToOtherEvent() const { |
bool TraceEvent::GetArgAsString(const std::string& name, |
std::string* arg) const { |
- std::map<std::string, std::string>::const_iterator i = arg_strings.find(name); |
- if (i != arg_strings.end()) { |
- *arg = i->second; |
+ const auto it = arg_strings.find(name); |
+ if (it != arg_strings.end()) { |
+ *arg = it->second; |
return true; |
} |
return false; |
@@ -129,9 +135,19 @@ bool TraceEvent::GetArgAsString(const std::string& name, |
bool TraceEvent::GetArgAsNumber(const std::string& name, |
double* arg) const { |
- std::map<std::string, double>::const_iterator i = arg_numbers.find(name); |
- if (i != arg_numbers.end()) { |
- *arg = i->second; |
+ const auto it = arg_numbers.find(name); |
+ if (it != arg_numbers.end()) { |
+ *arg = it->second; |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+bool TraceEvent::GetArgAsValue(const std::string& name, |
+ scoped_ptr<base::Value>* arg) const { |
+ const auto it = arg_values.find(name); |
+ if (it != arg_values.end()) { |
+ *arg = it->second->CreateDeepCopy(); |
return true; |
} |
return false; |
@@ -145,6 +161,10 @@ bool TraceEvent::HasNumberArg(const std::string& name) const { |
return (arg_numbers.find(name) != arg_numbers.end()); |
} |
+bool TraceEvent::HasArg(const std::string& name) const { |
+ return (arg_values.find(name) != arg_values.end()); |
+} |
+ |
std::string TraceEvent::GetKnownArgAsString(const std::string& name) const { |
std::string arg_string; |
bool result = GetArgAsString(name, &arg_string); |
@@ -173,6 +193,14 @@ bool TraceEvent::GetKnownArgAsBool(const std::string& name) const { |
return (arg_double != 0.0); |
} |
+scoped_ptr<base::Value> TraceEvent::GetKnownArgAsValue( |
+ const std::string& name) const { |
+ scoped_ptr<base::Value> arg_value; |
+ bool result = GetArgAsValue(name, &arg_value); |
+ DCHECK(result); |
+ return arg_value; |
+} |
+ |
// QueryNode |
QueryNode::QueryNode(const Query& query) : query_(query) { |
@@ -662,7 +690,7 @@ bool ParseEventsFromJson(const std::string& json, |
if (root_list->Get(i, &item)) { |
TraceEvent event; |
if (event.SetFromJSON(item)) |
- output->push_back(event); |
+ output->push_back(std::move(event)); |
else |
return false; |
} |