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

Side by Side Diff: base/debug/trace_event_unittest.cc

Issue 28593003: Avoid threading races on TraceSamplingThread's members (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed races on WaitableEvent Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | tools/valgrind/tsan_v2/suppressions.txt » ('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/debug/trace_event_unittest.h" 5 #include "base/debug/trace_event_unittest.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 1738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1749 "record-continuously,enable-sampling")); 1749 "record-continuously,enable-sampling"));
1750 } 1750 }
1751 1751
1752 TEST_F(TraceEventTestFixture, TraceSampling) { 1752 TEST_F(TraceEventTestFixture, TraceSampling) {
1753 event_watch_notification_ = 0; 1753 event_watch_notification_ = 0;
1754 TraceLog::GetInstance()->SetEnabled( 1754 TraceLog::GetInstance()->SetEnabled(
1755 CategoryFilter("*"), 1755 CategoryFilter("*"),
1756 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | 1756 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL |
1757 TraceLog::ENABLE_SAMPLING)); 1757 TraceLog::ENABLE_SAMPLING));
1758 1758
1759 WaitableEvent* sampled = new WaitableEvent(false, false);
1760 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled);
1761
1762 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); 1759 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff");
1763 sampled->Wait(); 1760 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1764 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); 1761 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things");
1765 sampled->Wait(); 1762 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1766 1763
1767 EndTraceAndFlush(); 1764 EndTraceAndFlush();
1768 1765
1769 // Make sure we hit at least once. 1766 // Make sure we hit at least once.
1770 EXPECT_TRUE(FindNamePhase("Stuff", "P")); 1767 EXPECT_TRUE(FindNamePhase("Stuff", "P"));
1771 EXPECT_TRUE(FindNamePhase("Things", "P")); 1768 EXPECT_TRUE(FindNamePhase("Things", "P"));
1772 } 1769 }
1773 1770
1774 TEST_F(TraceEventTestFixture, TraceSamplingScope) { 1771 TEST_F(TraceEventTestFixture, TraceSamplingScope) {
1775 event_watch_notification_ = 0; 1772 event_watch_notification_ = 0;
1776 TraceLog::GetInstance()->SetEnabled( 1773 TraceLog::GetInstance()->SetEnabled(
1777 CategoryFilter("*"), 1774 CategoryFilter("*"),
1778 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | 1775 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL |
1779 TraceLog::ENABLE_SAMPLING)); 1776 TraceLog::ENABLE_SAMPLING));
1780 1777
1781 WaitableEvent* sampled = new WaitableEvent(false, false);
1782 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled);
1783
1784 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); 1778 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name");
1785 sampled->Wait(); 1779 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1786 { 1780 {
1787 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); 1781 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA");
1788 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name"); 1782 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name");
1789 sampled->Wait(); 1783 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1790 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB"); 1784 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB");
1791 } 1785 }
1792 sampled->Wait(); 1786 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1793 { 1787 {
1794 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); 1788 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA");
1795 TRACE_EVENT_SCOPED_SAMPLING_STATE("CCC", "name"); 1789 TRACE_EVENT_SCOPED_SAMPLING_STATE("CCC", "name");
1796 sampled->Wait(); 1790 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1797 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "CCC"); 1791 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "CCC");
1798 } 1792 }
1799 sampled->Wait(); 1793 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1800 { 1794 {
1801 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); 1795 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA");
1802 TRACE_EVENT_SET_SAMPLING_STATE("DDD", "name"); 1796 TRACE_EVENT_SET_SAMPLING_STATE("DDD", "name");
1803 sampled->Wait(); 1797 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1804 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); 1798 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD");
1805 } 1799 }
1806 sampled->Wait(); 1800 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1807 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); 1801 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD");
1808 1802
1809 EndTraceAndFlush(); 1803 EndTraceAndFlush();
1810 } 1804 }
1811 1805
1812 TEST_F(TraceEventTestFixture, TraceContinuousSampling) { 1806 TEST_F(TraceEventTestFixture, TraceContinuousSampling) {
1813 event_watch_notification_ = 0; 1807 event_watch_notification_ = 0;
1814 TraceLog::GetInstance()->SetEnabled( 1808 TraceLog::GetInstance()->SetEnabled(
1815 CategoryFilter("*"), 1809 CategoryFilter("*"),
1816 TraceLog::Options(TraceLog::MONITOR_SAMPLING)); 1810 TraceLog::Options(TraceLog::MONITOR_SAMPLING));
1817 1811
1818 WaitableEvent* sampled = new WaitableEvent(false, false);
1819 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(
1820 sampled);
1821
1822 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA"); 1812 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA");
1823 sampled->Wait(); 1813 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1824 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB"); 1814 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB");
1825 sampled->Wait(); 1815 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1826 1816
1827 FlushMonitoring(); 1817 FlushMonitoring();
1828 1818
1829 // Make sure we can get the profiled data. 1819 // Make sure we can get the profiled data.
1830 EXPECT_TRUE(FindNamePhase("AAA", "P")); 1820 EXPECT_TRUE(FindNamePhase("AAA", "P"));
1831 EXPECT_TRUE(FindNamePhase("BBB", "P")); 1821 EXPECT_TRUE(FindNamePhase("BBB", "P"));
1832 1822
1833 Clear(); 1823 Clear();
1834 sampled->Wait(); 1824 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1835 1825
1836 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "CCC"); 1826 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "CCC");
1837 sampled->Wait(); 1827 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1838 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "DDD"); 1828 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "DDD");
1839 sampled->Wait(); 1829 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1840 1830
1841 FlushMonitoring(); 1831 FlushMonitoring();
1842 1832
1843 // Make sure the profiled data is accumulated. 1833 // Make sure the profiled data is accumulated.
1844 EXPECT_TRUE(FindNamePhase("AAA", "P")); 1834 EXPECT_TRUE(FindNamePhase("AAA", "P"));
1845 EXPECT_TRUE(FindNamePhase("BBB", "P")); 1835 EXPECT_TRUE(FindNamePhase("BBB", "P"));
1846 EXPECT_TRUE(FindNamePhase("CCC", "P")); 1836 EXPECT_TRUE(FindNamePhase("CCC", "P"));
1847 EXPECT_TRUE(FindNamePhase("DDD", "P")); 1837 EXPECT_TRUE(FindNamePhase("DDD", "P"));
1848 1838
1849 Clear(); 1839 Clear();
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
2357 thread.message_loop()->PostTask( 2347 thread.message_loop()->PostTask(
2358 FROM_HERE, Bind(&TraceWithAllMacroVariants, &task_complete_event)); 2348 FROM_HERE, Bind(&TraceWithAllMacroVariants, &task_complete_event));
2359 task_complete_event.Wait(); 2349 task_complete_event.Wait();
2360 task_complete_event.Reset(); 2350 task_complete_event.Reset();
2361 EndTraceAndFlushInThreadWithMessageLoop(); 2351 EndTraceAndFlushInThreadWithMessageLoop();
2362 ValidateAllTraceMacrosCreatedData(trace_parsed_); 2352 ValidateAllTraceMacrosCreatedData(trace_parsed_);
2363 } 2353 }
2364 2354
2365 } // namespace debug 2355 } // namespace debug
2366 } // namespace base 2356 } // namespace base
OLDNEW
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | tools/valgrind/tsan_v2/suppressions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698