| 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;
|
| }
|
|
|