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

Unified Diff: base/trace_event/trace_event_unittest.cc

Issue 1641513004: Update //base to chromium 9659b08ea5a34f889dc4166217f438095ddc10d2 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/trace_event/trace_event_system_stats_monitor.h ('k') | base/trace_event/trace_event_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/trace_event/trace_event_unittest.cc
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc
index 2449d54cf63b1f2cc5cba2d732c3afd242bc7b4b..8248f281e780daae97de8c5abecd3ac527031fc3 100644
--- a/base/trace_event/trace_event_unittest.cc
+++ b/base/trace_event/trace_event_unittest.cc
@@ -15,6 +15,7 @@
#include "base/memory/singleton.h"
#include "base/process/process_handle.h"
#include "base/single_thread_task_runner.h"
+#include "base/strings/pattern.h"
#include "base/strings/stringprintf.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/platform_thread.h"
@@ -47,6 +48,8 @@ const int kAsyncId = 5;
const char kAsyncIdStr[] = "0x5";
const int kAsyncId2 = 6;
const char kAsyncId2Str[] = "0x6";
+const int kFlowId = 7;
+const char kFlowIdStr[] = "0x7";
const char kRecordAllCategoryFilter[] = "*";
@@ -85,7 +88,14 @@ class TraceEventTestFixture : public testing::Test {
TraceLog::RECORDING_MODE);
}
+ void CancelTrace() {
+ WaitableEvent flush_complete_event(false, false);
+ CancelTraceAsync(&flush_complete_event);
+ flush_complete_event.Wait();
+ }
+
void EndTraceAndFlush() {
+ num_flush_callbacks_ = 0;
WaitableEvent flush_complete_event(false, false);
EndTraceAndFlushAsync(&flush_complete_event);
flush_complete_event.Wait();
@@ -103,6 +113,13 @@ class TraceEventTestFixture : public testing::Test {
flush_complete_event.Wait();
}
+ void CancelTraceAsync(WaitableEvent* flush_complete_event) {
+ TraceLog::GetInstance()->CancelTracing(
+ base::Bind(&TraceEventTestFixture::OnTraceDataCollected,
+ base::Unretained(static_cast<TraceEventTestFixture*>(this)),
+ base::Unretained(flush_complete_event)));
+ }
+
void EndTraceAndFlushAsync(WaitableEvent* flush_complete_event) {
TraceLog::GetInstance()->SetDisabled();
TraceLog::GetInstance()->Flush(
@@ -134,6 +151,7 @@ class TraceEventTestFixture : public testing::Test {
ASSERT_FALSE(tracelog->IsEnabled());
trace_buffer_.SetOutputCallback(json_output_.GetCallback());
event_watch_notification_ = 0;
+ num_flush_callbacks_ = 0;
}
void TearDown() override {
if (TraceLog::GetInstance())
@@ -150,6 +168,7 @@ class TraceEventTestFixture : public testing::Test {
TraceResultBuffer trace_buffer_;
TraceResultBuffer::SimpleOutput json_output_;
int event_watch_notification_;
+ size_t num_flush_callbacks_;
private:
// We want our singleton torn down after each test.
@@ -161,6 +180,10 @@ void TraceEventTestFixture::OnTraceDataCollected(
WaitableEvent* flush_complete_event,
const scoped_refptr<base::RefCountedString>& events_str,
bool has_more_events) {
+ num_flush_callbacks_++;
+ if (num_flush_callbacks_ > 1) {
+ EXPECT_FALSE(events_str->data().empty());
+ }
AutoLock lock(lock_);
json_output_.json_output.clear();
trace_buffer_.Start();
@@ -430,6 +453,12 @@ void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) {
"name1", "value1",
"name2", "value2");
+ TRACE_EVENT_FLOW_BEGIN0("all", "TRACE_EVENT_FLOW_BEGIN0 call", kFlowId);
+ TRACE_EVENT_FLOW_STEP0("all", "TRACE_EVENT_FLOW_STEP0 call", kFlowId,
+ "step1");
+ TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING0(
+ "all", "TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING0 call", kFlowId);
+
TRACE_EVENT_BEGIN_ETW("TRACE_EVENT_BEGIN_ETW0 call", kAsyncId, NULL);
TRACE_EVENT_BEGIN_ETW("TRACE_EVENT_BEGIN_ETW1 call", kAsyncId, "value");
TRACE_EVENT_END_ETW("TRACE_EVENT_END_ETW0 call", kAsyncId, NULL);
@@ -613,6 +642,17 @@ void ValidateAllTraceMacrosCreatedData(const ListValue& trace_parsed) {
EXPECT_SUB_FIND_("name2");
EXPECT_SUB_FIND_("value2");
+ EXPECT_FIND_("TRACE_EVENT_FLOW_BEGIN0 call");
+ EXPECT_SUB_FIND_("id");
+ EXPECT_SUB_FIND_(kFlowIdStr);
+ EXPECT_FIND_("TRACE_EVENT_FLOW_STEP0 call");
+ EXPECT_SUB_FIND_("id");
+ EXPECT_SUB_FIND_(kFlowIdStr);
+ EXPECT_SUB_FIND_("step1");
+ EXPECT_FIND_("TRACE_EVENT_FLOW_END_BIND_TO_ENCLOSING0 call");
+ EXPECT_SUB_FIND_("id");
+ EXPECT_SUB_FIND_(kFlowIdStr);
+
EXPECT_FIND_("TRACE_EVENT_BEGIN_ETW0 call");
EXPECT_SUB_FIND_("id");
EXPECT_SUB_FIND_(kAsyncIdStr);
@@ -882,6 +922,19 @@ TEST_F(TraceEventTestFixture, DataCaptured) {
ValidateAllTraceMacrosCreatedData(trace_parsed_);
}
+// Emit some events and validate that only empty strings are received
+// if we tell Flush() to discard events.
+TEST_F(TraceEventTestFixture, DataDiscarded) {
+ TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
+ TraceLog::RECORDING_MODE);
+
+ TraceWithAllMacroVariants(NULL);
+
+ CancelTrace();
+
+ EXPECT_TRUE(trace_parsed_.empty());
+}
+
class MockEnabledStateChangedObserver :
public TraceLog::EnabledStateObserver {
public:
@@ -968,7 +1021,7 @@ class AfterStateChangeEnabledStateObserver
: public TraceLog::EnabledStateObserver {
public:
AfterStateChangeEnabledStateObserver() {}
- virtual ~AfterStateChangeEnabledStateObserver() {}
+ ~AfterStateChangeEnabledStateObserver() override {}
// TraceLog::EnabledStateObserver overrides:
void OnTraceLogEnabled() override {
@@ -999,7 +1052,7 @@ class SelfRemovingEnabledStateObserver
: public TraceLog::EnabledStateObserver {
public:
SelfRemovingEnabledStateObserver() {}
- virtual ~SelfRemovingEnabledStateObserver() {}
+ ~SelfRemovingEnabledStateObserver() override {}
// TraceLog::EnabledStateObserver overrides:
void OnTraceLogEnabled() override {}
@@ -1052,6 +1105,43 @@ TEST_F(TraceEventTestFixture, NewTraceRecording) {
EndTraceAndFlush();
}
+TEST_F(TraceEventTestFixture, TestTraceFlush) {
+ size_t min_traces = 1;
+ size_t max_traces = 1;
+ do {
+ max_traces *= 2;
+ TraceLog::GetInstance()->SetEnabled(TraceConfig(),
+ TraceLog::RECORDING_MODE);
+ for (size_t i = 0; i < max_traces; i++) {
+ TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD);
+ }
+ EndTraceAndFlush();
+ } while (num_flush_callbacks_ < 2);
+
+ while (min_traces + 50 < max_traces) {
+ size_t traces = (min_traces + max_traces) / 2;
+ TraceLog::GetInstance()->SetEnabled(TraceConfig(),
+ TraceLog::RECORDING_MODE);
+ for (size_t i = 0; i < traces; i++) {
+ TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD);
+ }
+ EndTraceAndFlush();
+ if (num_flush_callbacks_ < 2) {
+ min_traces = traces - 10;
+ } else {
+ max_traces = traces + 10;
+ }
+ }
+
+ for (size_t traces = min_traces; traces < max_traces; traces++) {
+ TraceLog::GetInstance()->SetEnabled(TraceConfig(),
+ TraceLog::RECORDING_MODE);
+ for (size_t i = 0; i < traces; i++) {
+ TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD);
+ }
+ EndTraceAndFlush();
+ }
+}
// Test that categories work.
TEST_F(TraceEventTestFixture, Categories) {
@@ -2149,8 +2239,8 @@ namespace {
bool IsTraceEventArgsWhitelisted(const char* category_group_name,
const char* event_name) {
- if (MatchPattern(category_group_name, "toplevel") &&
- MatchPattern(event_name, "*")) {
+ if (base::MatchPattern(category_group_name, "toplevel") &&
+ base::MatchPattern(event_name, "*")) {
return true;
}
@@ -2187,7 +2277,10 @@ TEST_F(TraceEventTestFixture, ArgsWhitelisting) {
dict->GetDictionary("args", &args_dict);
ASSERT_TRUE(args_dict);
EXPECT_FALSE(args_dict->GetInteger("int_two", &int_value));
- EXPECT_TRUE(args_dict->GetInteger("stripped", &int_value));
+
+ std::string args_string;
+ EXPECT_TRUE(dict->GetString("args", &args_string));
+ EXPECT_EQ(args_string, "__stripped__");
}
class TraceEventCallbackTest : public TraceEventTestFixture {
@@ -2247,7 +2340,7 @@ class TraceEventCallbackTest : public TraceEventTestFixture {
const char* const arg_names[],
const unsigned char arg_types[],
const unsigned long long arg_values[],
- unsigned char flags) {
+ unsigned int flags) {
s_instance->collected_events_phases_.push_back(phase);
s_instance->collected_events_categories_.push_back(
TraceLog::GetCategoryGroupName(category_group_enabled));
« no previous file with comments | « base/trace_event/trace_event_system_stats_monitor.h ('k') | base/trace_event/trace_event_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698