Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Side by Side Diff: base/trace_event/trace_event_impl.cc

Issue 1165673002: [Startup Tracing] Hook up TraceConfig and remove CategoryFilter & TraceOptions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/trace_event/trace_event_impl.h ('k') | base/trace_event/trace_event_impl_constants.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/trace_event/trace_event_impl.h" 5 #include "base/trace_event/trace_event_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/base_switches.h" 10 #include "base/base_switches.h"
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 : mode_(DISABLED), 1147 : mode_(DISABLED),
1148 num_traces_recorded_(0), 1148 num_traces_recorded_(0),
1149 event_callback_(0), 1149 event_callback_(0),
1150 dispatching_to_observer_list_(false), 1150 dispatching_to_observer_list_(false),
1151 process_sort_index_(0), 1151 process_sort_index_(0),
1152 process_id_hash_(0), 1152 process_id_hash_(0),
1153 process_id_(0), 1153 process_id_(0),
1154 watch_category_(0), 1154 watch_category_(0),
1155 trace_options_(kInternalRecordUntilFull), 1155 trace_options_(kInternalRecordUntilFull),
1156 sampling_thread_handle_(0), 1156 sampling_thread_handle_(0),
1157 category_filter_(CategoryFilter::kDefaultCategoryFilterString), 1157 trace_config_(TraceConfig()),
1158 event_callback_category_filter_( 1158 event_callback_trace_config_(TraceConfig()),
1159 CategoryFilter::kDefaultCategoryFilterString),
1160 thread_shared_chunk_index_(0), 1159 thread_shared_chunk_index_(0),
1161 generation_(0), 1160 generation_(0),
1162 use_worker_thread_(false) { 1161 use_worker_thread_(false) {
1163 // Trace is enabled or disabled on one thread while other threads are 1162 // Trace is enabled or disabled on one thread while other threads are
1164 // accessing the enabled flag. We don't care whether edge-case events are 1163 // accessing the enabled flag. We don't care whether edge-case events are
1165 // traced or not, so we allow races on the enabled flag to keep the trace 1164 // traced or not, so we allow races on the enabled flag to keep the trace
1166 // macros fast. 1165 // macros fast.
1167 // TODO(jbates): ANNOTATE_BENIGN_RACE_SIZED crashes windows TSAN bots: 1166 // TODO(jbates): ANNOTATE_BENIGN_RACE_SIZED crashes windows TSAN bots:
1168 // ANNOTATE_BENIGN_RACE_SIZED(g_category_group_enabled, 1167 // ANNOTATE_BENIGN_RACE_SIZED(g_category_group_enabled,
1169 // sizeof(g_category_group_enabled), 1168 // sizeof(g_category_group_enabled),
(...skipping 14 matching lines...) Expand all
1184 switches::kTraceToConsole); 1183 switches::kTraceToConsole);
1185 if (filter.empty()) { 1184 if (filter.empty()) {
1186 filter = kEchoToConsoleCategoryFilter; 1185 filter = kEchoToConsoleCategoryFilter;
1187 } else { 1186 } else {
1188 filter.append(","); 1187 filter.append(",");
1189 filter.append(kEchoToConsoleCategoryFilter); 1188 filter.append(kEchoToConsoleCategoryFilter);
1190 } 1189 }
1191 1190
1192 LOG(ERROR) << "Start " << switches::kTraceToConsole 1191 LOG(ERROR) << "Start " << switches::kTraceToConsole
1193 << " with CategoryFilter '" << filter << "'."; 1192 << " with CategoryFilter '" << filter << "'.";
1194 SetEnabled(CategoryFilter(filter), 1193 SetEnabled(TraceConfig(filter, ECHO_TO_CONSOLE), RECORDING_MODE);
1195 RECORDING_MODE,
1196 TraceOptions(ECHO_TO_CONSOLE));
1197 } 1194 }
1198 #endif 1195 #endif
1199 1196
1200 logged_events_.reset(CreateTraceBuffer()); 1197 logged_events_.reset(CreateTraceBuffer());
1201 } 1198 }
1202 1199
1203 TraceLog::~TraceLog() { 1200 TraceLog::~TraceLog() {
1204 } 1201 }
1205 1202
1206 const unsigned char* TraceLog::GetCategoryGroupEnabled( 1203 const unsigned char* TraceLog::GetCategoryGroupEnabled(
(...skipping 19 matching lines...) Expand all
1226 "out of bounds category pointer"; 1223 "out of bounds category pointer";
1227 uintptr_t category_index = 1224 uintptr_t category_index =
1228 (category_ptr - category_begin) / sizeof(g_category_group_enabled[0]); 1225 (category_ptr - category_begin) / sizeof(g_category_group_enabled[0]);
1229 return g_category_groups[category_index]; 1226 return g_category_groups[category_index];
1230 } 1227 }
1231 1228
1232 void TraceLog::UpdateCategoryGroupEnabledFlag(size_t category_index) { 1229 void TraceLog::UpdateCategoryGroupEnabledFlag(size_t category_index) {
1233 unsigned char enabled_flag = 0; 1230 unsigned char enabled_flag = 0;
1234 const char* category_group = g_category_groups[category_index]; 1231 const char* category_group = g_category_groups[category_index];
1235 if (mode_ == RECORDING_MODE && 1232 if (mode_ == RECORDING_MODE &&
1236 category_filter_.IsCategoryGroupEnabled(category_group)) 1233 trace_config_.IsCategoryGroupEnabled(category_group))
1237 enabled_flag |= ENABLED_FOR_RECORDING; 1234 enabled_flag |= ENABLED_FOR_RECORDING;
1238 else if (mode_ == MONITORING_MODE && 1235 else if (mode_ == MONITORING_MODE &&
1239 category_filter_.IsCategoryGroupEnabled(category_group)) 1236 trace_config_.IsCategoryGroupEnabled(category_group))
1240 enabled_flag |= ENABLED_FOR_MONITORING; 1237 enabled_flag |= ENABLED_FOR_MONITORING;
1241 if (event_callback_ && 1238 if (event_callback_ &&
1242 event_callback_category_filter_.IsCategoryGroupEnabled(category_group)) 1239 event_callback_trace_config_.IsCategoryGroupEnabled(category_group))
1243 enabled_flag |= ENABLED_FOR_EVENT_CALLBACK; 1240 enabled_flag |= ENABLED_FOR_EVENT_CALLBACK;
1244 #if defined(OS_WIN) 1241 #if defined(OS_WIN)
1245 if (base::trace_event::TraceEventETWExport::isETWExportEnabled()) 1242 if (base::trace_event::TraceEventETWExport::isETWExportEnabled())
1246 enabled_flag |= ENABLED_FOR_ETW_EXPORT; 1243 enabled_flag |= ENABLED_FOR_ETW_EXPORT;
1247 #endif 1244 #endif
1248 1245
1249 g_category_group_enabled[category_index] = enabled_flag; 1246 g_category_group_enabled[category_index] = enabled_flag;
1250 } 1247 }
1251 1248
1252 void TraceLog::UpdateCategoryGroupEnabledFlags() { 1249 void TraceLog::UpdateCategoryGroupEnabledFlags() {
1253 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index); 1250 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index);
1254 for (size_t i = 0; i < category_index; i++) 1251 for (size_t i = 0; i < category_index; i++)
1255 UpdateCategoryGroupEnabledFlag(i); 1252 UpdateCategoryGroupEnabledFlag(i);
1256 } 1253 }
1257 1254
1258 void TraceLog::UpdateSyntheticDelaysFromCategoryFilter() { 1255 void TraceLog::UpdateSyntheticDelaysFromTraceConfig() {
1259 ResetTraceEventSyntheticDelays(); 1256 ResetTraceEventSyntheticDelays();
1260 const CategoryFilter::StringList& delays = 1257 const TraceConfig::StringList& delays =
1261 category_filter_.GetSyntheticDelayValues(); 1258 trace_config_.GetSyntheticDelayValues();
1262 CategoryFilter::StringList::const_iterator ci; 1259 TraceConfig::StringList::const_iterator ci;
1263 for (ci = delays.begin(); ci != delays.end(); ++ci) { 1260 for (ci = delays.begin(); ci != delays.end(); ++ci) {
1264 StringTokenizer tokens(*ci, ";"); 1261 StringTokenizer tokens(*ci, ";");
1265 if (!tokens.GetNext()) 1262 if (!tokens.GetNext())
1266 continue; 1263 continue;
1267 TraceEventSyntheticDelay* delay = 1264 TraceEventSyntheticDelay* delay =
1268 TraceEventSyntheticDelay::Lookup(tokens.token()); 1265 TraceEventSyntheticDelay::Lookup(tokens.token());
1269 while (tokens.GetNext()) { 1266 while (tokens.GetNext()) {
1270 std::string token = tokens.token(); 1267 std::string token = tokens.token();
1271 char* duration_end; 1268 char* duration_end;
1272 double target_duration = strtod(token.c_str(), &duration_end); 1269 double target_duration = strtod(token.c_str(), &duration_end);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1316 "must increase MAX_CATEGORY_GROUPS"; 1313 "must increase MAX_CATEGORY_GROUPS";
1317 if (category_index < MAX_CATEGORY_GROUPS) { 1314 if (category_index < MAX_CATEGORY_GROUPS) {
1318 // Don't hold on to the category_group pointer, so that we can create 1315 // Don't hold on to the category_group pointer, so that we can create
1319 // category groups with strings not known at compile time (this is 1316 // category groups with strings not known at compile time (this is
1320 // required by SetWatchEvent). 1317 // required by SetWatchEvent).
1321 const char* new_group = strdup(category_group); 1318 const char* new_group = strdup(category_group);
1322 ANNOTATE_LEAKING_OBJECT_PTR(new_group); 1319 ANNOTATE_LEAKING_OBJECT_PTR(new_group);
1323 g_category_groups[category_index] = new_group; 1320 g_category_groups[category_index] = new_group;
1324 DCHECK(!g_category_group_enabled[category_index]); 1321 DCHECK(!g_category_group_enabled[category_index]);
1325 // Note that if both included and excluded patterns in the 1322 // Note that if both included and excluded patterns in the
1326 // CategoryFilter are empty, we exclude nothing, 1323 // TraceConfig are empty, we exclude nothing,
1327 // thereby enabling this category group. 1324 // thereby enabling this category group.
1328 UpdateCategoryGroupEnabledFlag(category_index); 1325 UpdateCategoryGroupEnabledFlag(category_index);
1329 category_group_enabled = &g_category_group_enabled[category_index]; 1326 category_group_enabled = &g_category_group_enabled[category_index];
1330 // Update the max index now. 1327 // Update the max index now.
1331 base::subtle::Release_Store(&g_category_index, category_index + 1); 1328 base::subtle::Release_Store(&g_category_index, category_index + 1);
1332 } else { 1329 } else {
1333 category_group_enabled = 1330 category_group_enabled =
1334 &g_category_group_enabled[g_category_categories_exhausted]; 1331 &g_category_group_enabled[g_category_categories_exhausted];
1335 } 1332 }
1336 return category_group_enabled; 1333 return category_group_enabled;
1337 } 1334 }
1338 1335
1339 void TraceLog::GetKnownCategoryGroups( 1336 void TraceLog::GetKnownCategoryGroups(
1340 std::vector<std::string>* category_groups) { 1337 std::vector<std::string>* category_groups) {
1341 AutoLock lock(lock_); 1338 AutoLock lock(lock_);
1342 category_groups->push_back( 1339 category_groups->push_back(
1343 g_category_groups[g_category_trace_event_overhead]); 1340 g_category_groups[g_category_trace_event_overhead]);
1344 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index); 1341 size_t category_index = base::subtle::NoBarrier_Load(&g_category_index);
1345 for (size_t i = g_num_builtin_categories; i < category_index; i++) 1342 for (size_t i = g_num_builtin_categories; i < category_index; i++)
1346 category_groups->push_back(g_category_groups[i]); 1343 category_groups->push_back(g_category_groups[i]);
1347 } 1344 }
1348 1345
1349 void TraceLog::SetEnabled(const CategoryFilter& category_filter, 1346 void TraceLog::SetEnabled(const TraceConfig& trace_config, Mode mode) {
1350 Mode mode,
1351 const TraceOptions& options) {
1352 std::vector<EnabledStateObserver*> observer_list; 1347 std::vector<EnabledStateObserver*> observer_list;
1353 { 1348 {
1354 AutoLock lock(lock_); 1349 AutoLock lock(lock_);
1355 1350
1356 // Can't enable tracing when Flush() is in progress. 1351 // Can't enable tracing when Flush() is in progress.
1357 DCHECK(!flush_task_runner_); 1352 DCHECK(!flush_task_runner_);
1358 1353
1359 InternalTraceOptions new_options = 1354 InternalTraceOptions new_options =
1360 GetInternalOptionsFromTraceOptions(options); 1355 GetInternalOptionsFromTraceConfig(trace_config);
1361 1356
1362 InternalTraceOptions old_options = trace_options(); 1357 InternalTraceOptions old_options = trace_options();
1363 1358
1364 if (IsEnabled()) { 1359 if (IsEnabled()) {
1365 if (new_options != old_options) { 1360 if (new_options != old_options) {
1366 DLOG(ERROR) << "Attempting to re-enable tracing with a different " 1361 DLOG(ERROR) << "Attempting to re-enable tracing with a different "
1367 << "set of options."; 1362 << "set of options.";
1368 } 1363 }
1369 1364
1370 if (mode != mode_) { 1365 if (mode != mode_) {
1371 DLOG(ERROR) << "Attempting to re-enable tracing with a different mode."; 1366 DLOG(ERROR) << "Attempting to re-enable tracing with a different mode.";
1372 } 1367 }
1373 1368
1374 category_filter_.Merge(category_filter); 1369 trace_config_.Merge(trace_config);
1375 UpdateCategoryGroupEnabledFlags(); 1370 UpdateCategoryGroupEnabledFlags();
1376 return; 1371 return;
1377 } 1372 }
1378 1373
1379 if (dispatching_to_observer_list_) { 1374 if (dispatching_to_observer_list_) {
1380 DLOG(ERROR) << 1375 DLOG(ERROR) <<
1381 "Cannot manipulate TraceLog::Enabled state from an observer."; 1376 "Cannot manipulate TraceLog::Enabled state from an observer.";
1382 return; 1377 return;
1383 } 1378 }
1384 1379
1385 mode_ = mode; 1380 mode_ = mode;
1386 1381
1387 if (new_options != old_options) { 1382 if (new_options != old_options) {
1388 subtle::NoBarrier_Store(&trace_options_, new_options); 1383 subtle::NoBarrier_Store(&trace_options_, new_options);
1389 UseNextTraceBuffer(); 1384 UseNextTraceBuffer();
1390 } 1385 }
1391 1386
1392 num_traces_recorded_++; 1387 num_traces_recorded_++;
1393 1388
1394 category_filter_ = CategoryFilter(category_filter); 1389 trace_config_ = TraceConfig(trace_config);
1395 UpdateCategoryGroupEnabledFlags(); 1390 UpdateCategoryGroupEnabledFlags();
1396 UpdateSyntheticDelaysFromCategoryFilter(); 1391 UpdateSyntheticDelaysFromTraceConfig();
1397 1392
1398 if (new_options & kInternalEnableSampling) { 1393 if (new_options & kInternalEnableSampling) {
1399 sampling_thread_.reset(new TraceSamplingThread); 1394 sampling_thread_.reset(new TraceSamplingThread);
1400 sampling_thread_->RegisterSampleBucket( 1395 sampling_thread_->RegisterSampleBucket(
1401 &g_trace_state[0], 1396 &g_trace_state[0],
1402 "bucket0", 1397 "bucket0",
1403 Bind(&TraceSamplingThread::DefaultSamplingCallback)); 1398 Bind(&TraceSamplingThread::DefaultSamplingCallback));
1404 sampling_thread_->RegisterSampleBucket( 1399 sampling_thread_->RegisterSampleBucket(
1405 &g_trace_state[1], 1400 &g_trace_state[1],
1406 "bucket1", 1401 "bucket1",
(...skipping 22 matching lines...) Expand all
1429 } 1424 }
1430 1425
1431 void TraceLog::SetArgumentFilterPredicate( 1426 void TraceLog::SetArgumentFilterPredicate(
1432 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) { 1427 const TraceEvent::ArgumentFilterPredicate& argument_filter_predicate) {
1433 AutoLock lock(lock_); 1428 AutoLock lock(lock_);
1434 DCHECK(!argument_filter_predicate.is_null()); 1429 DCHECK(!argument_filter_predicate.is_null());
1435 DCHECK(argument_filter_predicate_.is_null()); 1430 DCHECK(argument_filter_predicate_.is_null());
1436 argument_filter_predicate_ = argument_filter_predicate; 1431 argument_filter_predicate_ = argument_filter_predicate;
1437 } 1432 }
1438 1433
1439 TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceOptions( 1434 TraceLog::InternalTraceOptions TraceLog::GetInternalOptionsFromTraceConfig(
1440 const TraceOptions& options) { 1435 const TraceConfig& config) {
1441 InternalTraceOptions ret = 1436 InternalTraceOptions ret =
1442 options.enable_sampling ? kInternalEnableSampling : kInternalNone; 1437 config.IsSamplingEnabled() ? kInternalEnableSampling : kInternalNone;
1443 if (options.enable_argument_filter) 1438 if (config.IsArgumentFilterEnabled())
1444 ret |= kInternalEnableArgumentFilter; 1439 ret |= kInternalEnableArgumentFilter;
1445 switch (options.record_mode) { 1440 switch (config.GetTraceRecordMode()) {
1446 case RECORD_UNTIL_FULL: 1441 case RECORD_UNTIL_FULL:
1447 return ret | kInternalRecordUntilFull; 1442 return ret | kInternalRecordUntilFull;
1448 case RECORD_CONTINUOUSLY: 1443 case RECORD_CONTINUOUSLY:
1449 return ret | kInternalRecordContinuously; 1444 return ret | kInternalRecordContinuously;
1450 case ECHO_TO_CONSOLE: 1445 case ECHO_TO_CONSOLE:
1451 return ret | kInternalEchoToConsole; 1446 return ret | kInternalEchoToConsole;
1452 case RECORD_AS_MUCH_AS_POSSIBLE: 1447 case RECORD_AS_MUCH_AS_POSSIBLE:
1453 return ret | kInternalRecordAsMuchAsPossible; 1448 return ret | kInternalRecordAsMuchAsPossible;
1454 } 1449 }
1455 NOTREACHED(); 1450 NOTREACHED();
1456 return kInternalNone; 1451 return kInternalNone;
1457 } 1452 }
1458 1453
1459 CategoryFilter TraceLog::GetCurrentCategoryFilter() { 1454 TraceConfig TraceLog::GetCurrentTraceConfig() const {
1460 AutoLock lock(lock_); 1455 AutoLock lock(lock_);
1461 return category_filter_; 1456 return trace_config_;
1462 }
1463
1464 TraceOptions TraceLog::GetCurrentTraceOptions() const {
1465 TraceOptions ret;
1466 InternalTraceOptions option = trace_options();
1467 ret.enable_sampling = (option & kInternalEnableSampling) != 0;
1468 ret.enable_argument_filter = (option & kInternalEnableArgumentFilter) != 0;
1469 if (option & kInternalRecordUntilFull)
1470 ret.record_mode = RECORD_UNTIL_FULL;
1471 else if (option & kInternalRecordContinuously)
1472 ret.record_mode = RECORD_CONTINUOUSLY;
1473 else if (option & kInternalEchoToConsole)
1474 ret.record_mode = ECHO_TO_CONSOLE;
1475 else if (option & kInternalRecordAsMuchAsPossible)
1476 ret.record_mode = RECORD_AS_MUCH_AS_POSSIBLE;
1477 else
1478 NOTREACHED();
1479 return ret;
1480 } 1457 }
1481 1458
1482 void TraceLog::SetDisabled() { 1459 void TraceLog::SetDisabled() {
1483 AutoLock lock(lock_); 1460 AutoLock lock(lock_);
1484 SetDisabledWhileLocked(); 1461 SetDisabledWhileLocked();
1485 } 1462 }
1486 1463
1487 void TraceLog::SetDisabledWhileLocked() { 1464 void TraceLog::SetDisabledWhileLocked() {
1488 lock_.AssertAcquired(); 1465 lock_.AssertAcquired();
1489 1466
(...skipping 11 matching lines...) Expand all
1501 if (sampling_thread_.get()) { 1478 if (sampling_thread_.get()) {
1502 // Stop the sampling thread. 1479 // Stop the sampling thread.
1503 sampling_thread_->Stop(); 1480 sampling_thread_->Stop();
1504 lock_.Release(); 1481 lock_.Release();
1505 PlatformThread::Join(sampling_thread_handle_); 1482 PlatformThread::Join(sampling_thread_handle_);
1506 lock_.Acquire(); 1483 lock_.Acquire();
1507 sampling_thread_handle_ = PlatformThreadHandle(); 1484 sampling_thread_handle_ = PlatformThreadHandle();
1508 sampling_thread_.reset(); 1485 sampling_thread_.reset();
1509 } 1486 }
1510 1487
1511 category_filter_.Clear(); 1488 trace_config_.Clear();
1512 subtle::NoBarrier_Store(&watch_category_, 0); 1489 subtle::NoBarrier_Store(&watch_category_, 0);
1513 watch_event_name_ = ""; 1490 watch_event_name_ = "";
1514 UpdateCategoryGroupEnabledFlags(); 1491 UpdateCategoryGroupEnabledFlags();
1515 AddMetadataEventsWhileLocked(); 1492 AddMetadataEventsWhileLocked();
1516 1493
1517 dispatching_to_observer_list_ = true; 1494 dispatching_to_observer_list_ = true;
1518 std::vector<EnabledStateObserver*> observer_list = 1495 std::vector<EnabledStateObserver*> observer_list =
1519 enabled_state_observer_list_; 1496 enabled_state_observer_list_;
1520 1497
1521 { 1498 {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 void TraceLog::CheckIfBufferIsFullWhileLocked() { 1593 void TraceLog::CheckIfBufferIsFullWhileLocked() {
1617 lock_.AssertAcquired(); 1594 lock_.AssertAcquired();
1618 if (logged_events_->IsFull()) { 1595 if (logged_events_->IsFull()) {
1619 if (buffer_limit_reached_timestamp_.is_null()) { 1596 if (buffer_limit_reached_timestamp_.is_null()) {
1620 buffer_limit_reached_timestamp_ = OffsetNow(); 1597 buffer_limit_reached_timestamp_ = OffsetNow();
1621 } 1598 }
1622 SetDisabledWhileLocked(); 1599 SetDisabledWhileLocked();
1623 } 1600 }
1624 } 1601 }
1625 1602
1626 void TraceLog::SetEventCallbackEnabled(const CategoryFilter& category_filter, 1603 void TraceLog::SetEventCallbackEnabled(const TraceConfig& trace_config,
1627 EventCallback cb) { 1604 EventCallback cb) {
1628 AutoLock lock(lock_); 1605 AutoLock lock(lock_);
1629 subtle::NoBarrier_Store(&event_callback_, 1606 subtle::NoBarrier_Store(&event_callback_,
1630 reinterpret_cast<subtle::AtomicWord>(cb)); 1607 reinterpret_cast<subtle::AtomicWord>(cb));
1631 event_callback_category_filter_ = category_filter; 1608 event_callback_trace_config_ = trace_config;
1632 UpdateCategoryGroupEnabledFlags(); 1609 UpdateCategoryGroupEnabledFlags();
1633 }; 1610 };
1634 1611
1635 void TraceLog::SetEventCallbackDisabled() { 1612 void TraceLog::SetEventCallbackDisabled() {
1636 AutoLock lock(lock_); 1613 AutoLock lock(lock_);
1637 subtle::NoBarrier_Store(&event_callback_, 0); 1614 subtle::NoBarrier_Store(&event_callback_, 0);
1638 UpdateCategoryGroupEnabledFlags(); 1615 UpdateCategoryGroupEnabledFlags();
1639 } 1616 }
1640 1617
1641 // Flush() works as the following: 1618 // Flush() works as the following:
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
2382 } 2359 }
2383 2360
2384 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { 2361 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() {
2385 if (*category_group_enabled_) { 2362 if (*category_group_enabled_) {
2386 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, 2363 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_,
2387 name_, event_handle_); 2364 name_, event_handle_);
2388 } 2365 }
2389 } 2366 }
2390 2367
2391 } // namespace trace_event_internal 2368 } // namespace trace_event_internal
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_impl.h ('k') | base/trace_event/trace_event_impl_constants.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698