| 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 796c386f4dc59ef2b38187d5267c6ae37c6bc8cc..18c5fb4a7a96c46129ca60d4952558afbac009bd 100644
|
| --- a/base/trace_event/trace_event_unittest.cc
|
| +++ b/base/trace_event/trace_event_unittest.cc
|
| @@ -88,6 +88,7 @@ class TraceEventTestFixture : public testing::Test {
|
| }
|
|
|
| void EndTraceAndFlush() {
|
| + num_flush_callbacks_ = 0;
|
| WaitableEvent flush_complete_event(false, false);
|
| EndTraceAndFlushAsync(&flush_complete_event);
|
| flush_complete_event.Wait();
|
| @@ -152,6 +153,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.
|
| @@ -163,6 +165,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();
|
| @@ -1071,6 +1077,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) {
|
|
|