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

Side by Side Diff: components/scheduler/base/task_queue_manager_unittest.cc

Issue 1447563002: Implement frame attribution (FrameBlamer) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make sure blame context is initialized early enough Created 4 years, 8 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/scheduler/base/task_queue_manager.h" 5 #include "components/scheduler/base/task_queue_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/memory/ref_counted_memory.h"
11 #include "base/run_loop.h" 12 #include "base/run_loop.h"
12 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
13 #include "base/test/simple_test_tick_clock.h" 14 #include "base/test/simple_test_tick_clock.h"
15 #include "base/test/trace_event_analyzer.h"
14 #include "base/threading/thread.h" 16 #include "base/threading/thread.h"
17 #include "base/trace_event/blame_context.h"
18 #include "base/trace_event/trace_buffer.h"
15 #include "cc/test/ordered_simple_task_runner.h" 19 #include "cc/test/ordered_simple_task_runner.h"
16 #include "components/scheduler/base/real_time_domain.h" 20 #include "components/scheduler/base/real_time_domain.h"
17 #include "components/scheduler/base/task_queue_impl.h" 21 #include "components/scheduler/base/task_queue_impl.h"
18 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h" 22 #include "components/scheduler/base/task_queue_manager_delegate_for_test.h"
19 #include "components/scheduler/base/task_queue_selector.h" 23 #include "components/scheduler/base/task_queue_selector.h"
20 #include "components/scheduler/base/test_always_fail_time_source.h" 24 #include "components/scheduler/base/test_always_fail_time_source.h"
21 #include "components/scheduler/base/test_time_source.h" 25 #include "components/scheduler/base/test_time_source.h"
22 #include "components/scheduler/base/virtual_time_domain.h" 26 #include "components/scheduler/base/virtual_time_domain.h"
23 #include "components/scheduler/base/work_queue.h" 27 #include "components/scheduler/base/work_queue.h"
24 #include "components/scheduler/base/work_queue_sets.h" 28 #include "components/scheduler/base/work_queue_sets.h"
(...skipping 1810 matching lines...) Expand 10 before | Expand all | Expand 10 after
1835 queue0->PostTask( 1839 queue0->PostTask(
1836 FROM_HERE, base::Bind(&RunloopCurrentlyExecutingTaskQueueTestTask, 1840 FROM_HERE, base::Bind(&RunloopCurrentlyExecutingTaskQueueTestTask,
1837 message_loop_.get(), manager_.get(), &task_sources, 1841 message_loop_.get(), manager_.get(), &task_sources,
1838 &tasks_to_post_from_nested_loop)); 1842 &tasks_to_post_from_nested_loop));
1839 1843
1840 message_loop_->RunUntilIdle(); 1844 message_loop_->RunUntilIdle();
1841 EXPECT_THAT(task_sources, ElementsAre(queue0, queue1, queue2, queue0)); 1845 EXPECT_THAT(task_sources, ElementsAre(queue0, queue1, queue2, queue0));
1842 EXPECT_EQ(nullptr, manager_->currently_executing_task_queue()); 1846 EXPECT_EQ(nullptr, manager_->currently_executing_task_queue());
1843 } 1847 }
1844 1848
1849 void OnTraceDataCollected(base::Closure quit_closure,
1850 base::trace_event::TraceResultBuffer* buffer,
1851 const scoped_refptr<base::RefCountedString>& json,
1852 bool has_more_events) {
1853 buffer->AddFragment(json->data());
1854 if (!has_more_events)
1855 quit_closure.Run();
1856 }
1857
1858 class TaskQueueManagerTestWithTracing : public TaskQueueManagerTest {
1859 public:
1860 void StartTracing();
1861 void StopTracing();
1862 scoped_ptr<trace_analyzer::TraceAnalyzer> CreateTraceAnalyzer();
1863 };
1864
1865 void TaskQueueManagerTestWithTracing::StartTracing() {
1866 base::trace_event::TraceLog::GetInstance()->SetEnabled(
1867 base::trace_event::TraceConfig("*"),
1868 base::trace_event::TraceLog::RECORDING_MODE);
1869 }
1870
1871 void TaskQueueManagerTestWithTracing::StopTracing() {
1872 base::trace_event::TraceLog::GetInstance()->SetDisabled();
1873 }
1874
1875 scoped_ptr<trace_analyzer::TraceAnalyzer>
1876 TaskQueueManagerTestWithTracing::CreateTraceAnalyzer() {
1877 base::trace_event::TraceResultBuffer buffer;
1878 base::trace_event::TraceResultBuffer::SimpleOutput trace_output;
1879 buffer.SetOutputCallback(trace_output.GetCallback());
1880 base::RunLoop run_loop;
1881 buffer.Start();
1882 base::trace_event::TraceLog::GetInstance()->Flush(
1883 Bind(&OnTraceDataCollected, run_loop.QuitClosure(),
1884 base::Unretained(&buffer)));
1885 run_loop.Run();
1886 buffer.Finish();
1887
1888 return make_scoped_ptr(
1889 trace_analyzer::TraceAnalyzer::Create(trace_output.json_output));
1890 }
1891
1892 TEST_F(TaskQueueManagerTestWithTracing, BlameContextAttribution) {
1893 using trace_analyzer::Query;
1894
1895 Initialize(1u);
1896 TaskQueue* queue = runners_[0].get();
1897
1898 StartTracing();
1899 {
1900 base::trace_event::BlameContext blame_context("cat", "name", "type",
1901 "scope", 0, nullptr);
1902 blame_context.Initialize();
1903 queue->SetBlameContext(&blame_context);
1904 queue->PostTask(FROM_HERE, base::Bind(&NopTask));
1905 test_task_runner_->RunUntilIdle();
1906 }
1907 StopTracing();
1908 scoped_ptr<trace_analyzer::TraceAnalyzer> analyzer = CreateTraceAnalyzer();
1909
1910 trace_analyzer::TraceEventVector events;
1911 Query q = Query::EventPhaseIs(TRACE_EVENT_PHASE_ENTER_CONTEXT) ||
1912 Query::EventPhaseIs(TRACE_EVENT_PHASE_LEAVE_CONTEXT);
1913 analyzer->FindEvents(q, &events);
1914
1915 EXPECT_EQ(2u, events.size());
1916 }
1917
1845 } // namespace scheduler 1918 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/task_queue_impl.cc ('k') | components/scheduler/child/compositor_worker_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698