Index: base/trace_event/trace_event_impl.cc |
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc |
index 445cb6db97aad8cedd410c60ef3447ab731c86ce..72b46f92914c8d73d51068324f6c2a757371b5d1 100644 |
--- a/base/trace_event/trace_event_impl.cc |
+++ b/base/trace_event/trace_event_impl.cc |
@@ -430,25 +430,22 @@ scoped_ptr<TraceBufferChunk> TraceBufferChunk::Clone() const { |
// and unlocks at the end of scope if locked. |
class TraceLog::OptionalAutoLock { |
public: |
- explicit OptionalAutoLock(Lock& lock) |
- : lock_(lock), |
- locked_(false) { |
- } |
+ explicit OptionalAutoLock(Lock* lock) : lock_(lock), locked_(false) {} |
~OptionalAutoLock() { |
if (locked_) |
- lock_.Release(); |
+ lock_->Release(); |
} |
void EnsureAcquired() { |
if (!locked_) { |
- lock_.Acquire(); |
+ lock_->Acquire(); |
locked_ = true; |
} |
} |
private: |
- Lock& lock_; |
+ Lock* lock_; |
bool locked_; |
DISALLOW_COPY_AND_ASSIGN(OptionalAutoLock); |
}; |
@@ -624,7 +621,7 @@ void TraceEvent::Reset() { |
void TraceEvent::UpdateDuration(const TimeTicks& now, |
const TimeTicks& thread_now) { |
- DCHECK(duration_.ToInternalValue() == -1); |
+ DCHECK_EQ(duration_.ToInternalValue(), -1); |
duration_ = now - timestamp_; |
thread_duration_ = thread_now - thread_timestamp_; |
} |
@@ -1977,7 +1974,7 @@ TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( |
std::string console_message; |
if (*category_group_enabled & |
(ENABLED_FOR_RECORDING | ENABLED_FOR_MONITORING)) { |
- OptionalAutoLock lock(lock_); |
+ OptionalAutoLock lock(&lock_); |
TraceEvent* trace_event = NULL; |
if (thread_local_event_buffer) { |
@@ -2130,7 +2127,7 @@ void TraceLog::UpdateTraceEventDuration( |
std::string console_message; |
if (*category_group_enabled & ENABLED_FOR_RECORDING) { |
- OptionalAutoLock lock(lock_); |
+ OptionalAutoLock lock(&lock_); |
TraceEvent* trace_event = GetEventByHandleInternal(handle, &lock); |
if (trace_event) { |
@@ -2490,18 +2487,35 @@ bool CategoryFilter::IsCategoryGroupEnabled( |
// Do a second pass to check for explicitly disabled categories |
// (those explicitly enabled have priority due to first pass). |
category_group_tokens.Reset(); |
+ bool category_group_disabled = false; |
while (category_group_tokens.GetNext()) { |
std::string category_group_token = category_group_tokens.token(); |
for (StringList::const_iterator ci = excluded_.begin(); |
ci != excluded_.end(); ++ci) { |
- if (MatchPattern(category_group_token.c_str(), ci->c_str())) |
- return false; |
+ if (MatchPattern(category_group_token.c_str(), ci->c_str())) { |
+ // Current token of category_group_name is present in excluded_list. |
+ // Flag the exclusion and proceed further to check if any of the |
+ // remaining categories of category_group_name is not present in the |
+ // excluded_ list. |
+ category_group_disabled = true; |
+ break; |
+ } |
+ // One of the category of category_group_name is not present in |
+ // excluded_ list. So, it has to be included_ list. Enable the |
+ // category_group_name for recording. |
+ category_group_disabled = false; |
} |
+ // One of the categories present in category_group_name is not present in |
+ // excluded_ list. Implies this category_group_name group can be enabled |
+ // for recording, since one of its groups is enabled for recording. |
+ if (!category_group_disabled) |
+ break; |
} |
// If the category group is not excluded, and there are no included patterns |
// we consider this category group enabled, as long as it had categories |
// other than disabled-by-default. |
- return included_.empty() && had_enabled_by_default; |
+ return !category_group_disabled && |
+ included_.empty() && had_enabled_by_default; |
} |
bool CategoryFilter::IsCategoryEnabled(const char* category_name) const { |
@@ -2571,7 +2585,7 @@ namespace trace_event_internal { |
ScopedTraceBinaryEfficient::ScopedTraceBinaryEfficient( |
const char* category_group, const char* name) { |
// The single atom works because for now the category_group can only be "gpu". |
- DCHECK(strcmp(category_group, "gpu") == 0); |
+ DCHECK_EQ(strcmp(category_group, "gpu"), 0); |
static TRACE_EVENT_API_ATOMIC_WORD atomic = 0; |
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO_CUSTOM_VARIABLES( |
category_group, atomic, category_group_enabled_); |